1 『Oracle Database PL/SQL言語リファレンス』のこのリリースの変更点
Oracle Database PL/SQL言語リファレンスのリリース23aiの新機能
Oracle Database 23aiのPL/SQL言語リファレンスでは、次の新機能および拡張機能について説明しています。
関連項目:
Oracle Databaseリリース23aiの新機能すべての詳細は、『Oracle Databaseの新機能』を参照してください
SQL BOOLEANデータ型
このリリースより前のPL/SQLではBOOLEANのサポートがすでに提供されていますが、BOOLEANデータ型もSQLでサポートされるようになりました。このサポートの拡張により、PL/SQLとSQLの互換性が向上します。
BOOLEANパラメータ・タイプのPL/SQLストアド・ファンクションは、SQLから直接起動できるようになりました。BOOLEAN引数を持つPL/SQLファンクションはSQLからすでにコール可能でしたが(BOOLEAN型のバインドの引数を使用して)、BOOLEAN式およびBOOLEANリテラルもサポートされるようになりました。さらに、BOOLEAN型の値を予期するホスト・バインドを伴うPL/SQLストアド・プロシージャおよび無名PL/SQLブロックはOCIおよび動的SQLやDBMS_SQLなどのその他のインタフェースを介してCから起動できます。また、BOOLEAN型の仮パラメータを使用してCで信頼されるまたはCに対応したコールアウトをコールすることも可能です。
PL/SQLブロック内部のSELECT文におけるINTOおよびBULK COLLECT INTO句でのBOOLEANの定義はサポートされています。
BOOLEANと数値型と文字型の間の暗黙的な変換がサポートされています。数値および文字変数および式をBOOLEAN変数に割り当てることができます。関数to_booleanは、数値型および文字型からBOOLEANデータ型への変換にも追加されています。ファンクションto_number、to_charおよびto_ncharで、BOOLEANを数値や文字型に変換するためのBOOLEANのオーバーロードを使用できるようになりました。CAST演算子を使用して式をBOOLEAN型にキャストすることもできます。
暗黙的な変換のサポートを有効にするには、初期化パラメータPLSQL_IMPLICIT_CONVERSION_BOOLをTRUEに設定する必要があります。CASTやto_charのような明示的な変換はパラメータに依存しないため、PLSQL_IMPLICIT_CONVERSION_BOOLがTRUEとFALSEのどちらに設定されているかに関係なく動作します。PLSQL_IMPLICIT_CONVERSION_BOOLの使用方法の詳細は、『Oracle Databaseリファレンス』を参照してください。
PL/SQLのすべてのDML操作は、配列INバインドおよび配列OUTバインドを含む、INバインドとOUTバインドの両方でBOOLEAN変数を取得します。DMLトリガーは、WHEN句のBOOLEANバインド(INバインドとOUTバインドの両方)およびBOOLEAN列参照をサポートします。
パイプライン・テーブル・ファンクションおよび多相表関数(PTF)は、BOOLEANデータ型の列を返すことをサポートします。
パラメータがBOOLEANであるコール指定を使用して、PL/SQLからBOOLEAN型のパラメータを持つJavaおよびJavaScriptのストアド・プロシージャを呼び出せます。PL/SQLプロシージャと無名ブロックも、サーバーで、またはクライアントサイバー環境でJDBCを使用してJavaから起動できます。OCI、動的SQLまたはDBMS_SQLを使用して渡されるBOOLEAN型の変数は、BOOLEANとして直接渡すことができます。
ノート:
BOOLをBOOLEANの略称として使用できます。
関連項目:
-
SQLの
BOOLEANデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください -
データ変換ルールの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
例1-1 SQLからのBOOLEAN引数を使用したPL/SQLファンクションのコール
CREATE OR REPLACE FUNCTION useBool(p1 BOOLEAN) RETURN NUMBER AS
BEGIN
IF p1 THEN RETURN 100;
ELSE
RETURN 200;
END IF;
END;
/
SET SERVEROUTPUT ON;
DECLARE
v1 NUMBER;
v2 BOOLEAN := TRUE;
BEGIN
SELECT useBool(v2) INTO v1 FROM dual; --boolean argument function called from SELECT
DBMS_OUTPUT.PUT_LINE(v1);
END;
/
結果:
100
SQL VECTORデータ型
Oracle Databaseリリース23aiでは、PL/SQLでVECTORデータ型とベクトル操作がサポートされます。
Oracle AI Vector Searchで人工知能ワークロードをサポートするために、VECTORデータ型が導入されました。新しいデータ型とともに、距離関数を含むベクトル演算がデータベース内のベクトルを管理するために提供されます。PL/SQLでは、VECTORデータ型は独自のスカラー・ファミリ・タイプとしてサポートされており、PL/SQLの他のデータ型と同じ方法で使用できます。
PL/SQLのベクトルの詳細は、「VECTORデータ型」を参照してください。
Oracle AI Vector SearchおよびOracle Databaseでのベクトルの一般的なサポートの詳細は、『Oracle Database AI Vector Searchユーザーズ・ガイド』を参照してください。
IF [NOT] EXISTS構文のサポート
句IF NOT EXISTSおよびIF EXISTSは、CREATE、ALTERおよびDROP DDL文でサポートされています。これらは、指定されたオブジェクトの存在または存在しないことによって発生する可能性のあるエラーを抑制するために使用され、冪等のDDLスクリプトを記述できます。
IF NOT EXISTS句は、指定された名前のオブジェクトがすでに存在する場合にエラーがスローされないようにするために、CREATE DDL文でサポートされています。オブジェクトがすでに存在する場合、コマンドは無視され、元のオブジェクトは変更されません。
flip側では、ALTERおよびDROP DDL文とともに使用すると、IF EXISTS句によってエラーが抑制されます。指定された名前のオブジェクトが存在しない場合、コマンドは無視され、ALTERまたはDROPの影響を受けるオブジェクトは存在しません。
この句を使用または除外することで、DDL文の実行前にオブジェクトの存在を確認する必要があるかどうかに応じた、より細かい制御が可能になります。この柔軟性により、オブジェクトが存在する(または存在しない)場合に文を無視するかエラーを発生させるかを決定できます。
ノート:
CREATE DDL文を使用するコマンドでは、IF NOT EXISTSをOR REPLACEと組み合せて使用することはできません。
関連項目:
- 様々なオブジェクト・タイプを使用して
IF[NOT]EXISTSを実装するために使用されるセマンティクスの詳細は、「ストアドPL/SQLユニットのSQL文」を参照してください -
IF[NOT]EXISTS句の使用の詳細は、『Oracle Database開発ガイド』を参照してください
例1-2 IF NOT EXISTSを使用したCREATE PROCEDURE
この文を1回実行すると、プロシージャhelloが作成されます(同じ名前のプロシージャがまだスキーマに存在しないことが前提です)。
CREATE PROCEDURE IF NOT EXISTS hello AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello there');
END;
/
プロシージャ本体の変更がある場合でも、文の追加実行はエラーになりません。元の本体は不変です。
CREATE PROCEDURE IF NOT EXISTS hello AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Second hello');
END;
/
ノート:
コマンドが無視されるか実行されるかに関係なく、同じ出力メッセージ(この場合は「プロシージャが作成されました。」)が表示されます。これにより、冪等のDDLスクリプトを記述できるようになります。ALTER、CREATEおよびDROP文についても同様です。
プロシージャ・テキストは、2番目の文が実行される前後と同じです。
SELECT TEXT FROM USER_SOURCE WHERE NAME='HELLO';
TEXT
-------------------------------------------
procedure hello
AS BEGIN
DBMS_OUTPUT.PUT_LINE('Hello there');
END;
拡張されたCASE制御
単純なCASE文が、Dangling Predicateと選択リストの使用がサポートされるようにPL/SQLで拡張されたことで、コードを簡略化し、冗長性を減らすことが可能になりました。
Dangling Predicateは左オペランドが欠落している通常の式で、これを任意の数のリテラルまたは式のかわりに、またはそれらと組み合せてselector_valueとして使用できます。Dangling Predicateを使用すると、検索CASE文を必要とせずにより複雑な比較を作成できます。
ノート:
現在、Dangling PredicateのIS JSONおよびIS OFはサポートされていません。
単純なCASE文のWHEN句で、カンマで区切られた選択肢のリストがサポートされるようになりました。同じ結果に対応する複数のselector_valueオプションを統合できるため、コードの合理化に役立てることができます。
関連項目:
- 拡張されたCASE制御の使用の詳細と、選択リストを使用する例は、「単純なCASE式」を参照してください
- 拡張された
CASE制御の使用の詳細と、Dangling Predicateを使用する例は、「単純なCASE文」を参照してください - 拡張された
CASE制御を含む単純なCASE文の構文およびセマンティックスの詳細は、「CASE文」を参照してください
JSONコンストラクタおよびJSON_VALUEのPL/SQL集計タイプのサポート
JSONコンストラクタは、PL/SQL集計タイプを受け入れ、集計タイプ・データが移入されたJSONオブジェクトまたは配列を返すことができるようになりました。逆に、組込みファンクションjson_valueが、JSONから指定された集計タイプにマップすることでRETURNING句でPL/SQL集計タイプをサポートするようになりました。
すべてのPL/SQLレコード・フィールドとコレクション・データ要素の型制約は、json_valueによって適用されます。
SQLオブジェクトとPL/SQLレコード・タイプ・インスタンス(%ROWTYPE属性によって作成された暗黙的なレコードを含む)は、JSONコンストラクタへの有効な入力として許可されます。ユーザー定義の型を入力としてサポートするように拡張されたことで、PL/SQLアプリケーションとJSONをサポートする言語間のデータ交換が合理化されます。
関連項目:
-
json_valueおよびJSONコンストラクタをPL/SQL集計タイプとともに使用する方法の詳細は、「PL/SQLとJSONの型変換」を参照してください -
JSONコンストラクタの詳細は、『Oracle Database JSON開発者ガイド』を参照してください
-
json_valueを使用してユーザー定義のオブジェクト型またはコレクション型のインスタンスをインスタンス化する方法の詳細は、『Oracle Database JSON開発者ガイド』を参照してください
SQLトランスパイラ
SQLトランスパイラが自動的に実行され、可能な場合は、SQL内のPL/SQLファンクションを、ユーザーの介入なしでSQL式に変換(トランスパイル)します。
変換操作はユーザーに対して透過的であり、SQLとPL/SQLランタイムの間で切り替えることで発生するオーバーヘッドを削減することによってパフォーマンスを改善できます。
関連項目:
-
SQLトランスパイラによって
SCALARマクロのかわりに標準のPL/SQLファンクションをどのように使用できるかの詳細は、「SQL_MACRO句」を参照してください -
SQLトランスコンパイラの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください
Oracle Database 23ai、リリース更新23.7
Oracle Database 23ai、リリース更新23.7のPL/SQL言語リファレンスでは、次の新機能および拡張機能について説明しています。
ジャッカード距離メトリック
Oracle Databaseリリース23ai、リリース更新23.7では、PL/SQLで、ベクトル類似性検索で使用されるジャッカード距離メトリックがサポートされています。
ジャッカード類似度は、2つの非対称BINARYベクトルの間で共通する重要な(ゼロ以外の)属性のシェアを判別するために使用されます。距離メトリックは、BINARYベクトルのみに適用されます。
PL/SQLでのベクトルの使用の詳細は、「VECTORデータ型」を参照してください。
ジャッカード類似度の詳細は、Oracle Database AI Vector Searchユーザーズ・ガイドを参照してください。
BINARYベクトル・サポート
Oracle Databaseリリース23ai、リリース更新23.7では、PL/SQLでBINARYベクトル形式がサポートされています。
BINARY形式は、PL/SQLのVECTORデータ型でサポートされるようになりました。
PL/SQLのベクトルの詳細は、「VECTORデータ型」を参照してください。
BINARYベクトルの詳細は、Oracle Database AI Vector Searchユーザーズ・ガイドを参照してください。
VECTORディメンション単位の算術サポート
Oracle Databaseリリース23ai、リリース更新23.7では、PL/SQLは算術操作でVECTORデータ型をサポートしています。
ディメンション単位の加算、減算および乗算は、VECTORデータ型の変数および列に対して実行できます。
PL/SQLのベクトル算術の詳細は、「PL/SQLでサポートされているVECTOR操作」を参照してください。
VECTORの算術および集計の詳細は、Oracle Database AI Vector Searchユーザーズ・ガイドを参照してください。
Oracle Database 23ai、リリース更新23.8
Oracle Database 23ai、リリース更新23.8のPL/SQL言語リファレンスでは、次の新機能および拡張機能について説明しています。
SPARSEベクトル・サポート
Oracle Databaseリリース23ai、リリース更新23.8では、PL/SQLでSPARSEベクトルの作成および宣言がネイティブにサポートされています。
疎ベクトルは通常、多数のディメンションを持つベクトルですが、それらのディメンションのうちゼロ以外の値を持つのはごく一部にすぎません。場合によっては、SPARSEベクトルを使用すると、DENSEベクトルを使用したときと比較して領域効率が向上し、類似検索のパフォーマンスが向上することがあります。
RACインスタンスを使用している場合は、PL/SQLでSPARSEのサポートを有効にするために、Oracle RACの2段階ローリング更新を使用してパッチ37535524を有効にする必要があります。詳細は、『Oracle Real Application Clusters管理およびデプロイ・ガイド』を参照してください
PL/SQLでのSPARSEベクトルの詳細は、「VECTORデータ型」を参照してください。
SPARSEベクトルの詳細は、Oracle Database AI Vector Search ユーザーズ・ガイドを参照してください。
非推奨となった機能
次の機能は非推奨であり、将来のリリースではサポートされなくなる可能性があります。
コマンド ALTER TYPE ... INVALIDATEは非推奨となりました。かわりにCASCADE句を使用してください。
ALTER TYPEのREPLACE句は非推奨となりました。かわりにalter_method_spec句を使用してください。または、CREATE OR REPLACE TYPE文を使用して型を再作成することもできます。
Oracle Databaseの12cリリース1(12.1)以降、コンパイル・パラメータPLSQL_DEBUGは非推奨となります。
PL/SQLユニットをデバッグ用にコンパイルするには、PLSQL_OPTIMIZE_LEVEL=1を指定します。
コンパイル・パラメータの詳細は、PL/SQLユニットおよびコンパイル・パラメータを参照してください。
サポート対象外機能
サポート対象外になったPL/SQL言語リファレンスの機能はありません。
関連項目:
- Oracle Databaseのこのリリースでサポート対象外になった機能の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。