『Oracle Database PL/SQL言語リファレンス』のこのリリースの変更点
『Oracle Database PL/SQL言語リファレンス』に対する変更は、リリースごとに記載されています。
この章の内容は次のとおりです。
Oracle Databaseリリース19cにおける変更点
Oracle Database 19c以降では、多相表関数とその実装メソッドが同じパッケージで定義されていると、USING句がオプションになります。
関連項目:
-
多相表関数、構文およびセマンティクスの詳細は、「PIPELINED句」を参照
SQLマクロ
SQLマクロ(SQM)を作成して、共通のSQL式および文を、他のSQL文で使用できる再利用可能なパラメータ化された構造体にくくり出すことができます。
Oracle Databaseリリース19c, バージョン19.7以降、SQL表マクロがサポートされています。SQL表マクロは、通常FROM句で使用される式で、多相(パラメータ化)ビューのように機能します。
SQL表マクロにより、開発者の生産性が高まり、コラボレーション開発が簡略化され、コード品質が向上します。
関連項目:
- 構文およびセマンティクスの詳細は、CREATE FUNCTION文を参照してください
- SQL_MACRO句の構文およびセマンティクス
IF [NOT] EXISTS構文のサポート
Oracle Database 19cリリース更新19.28以降では、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開発ガイド』を参照してください
例 - 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;
Oracle Databaseリリース18cでの変更点
Oracle Databaseの18cのOracle Database PL/SQL言語リファレンスでは、次の新機能について説明します。
新機能
オブジェクト型の非存続性のサポート
この機能ではプログラム内の抽象データ型にマーキングをして、その使用を処理や格納またはそれら両方の用途に限定できます。
永続不可型のインスタンスは、ディスク上で保持することはできません。
関連項目:
-
構文およびセマンティクスの詳細は、
CREATETYPE文の[NOT] PERSISTABLE句を参照してください。
多相テーブル・ファンクション
多相テーブル・ファンクション(PTF)は新しいタイプのテーブル・ファンクションで、PTFに渡された引数によって戻り型が決定されます。
テーブル・ファンクションは行のコレクションを返すファンクションで、SQL問合せブロックのFROM句から呼び出せます。
この新しい多相テーブル・ファンクション(PTF)は、Oracle Databaseの分析機能を拡張するための効率的でスケーラブルなフレームワークを提供します。問合せの記述者はPTFの実装の詳細がわからなくても、これらのファンクションを呼び出すことができ、PTF側でも、ファンクションがどのように実行されるか(シリアルまたはパラレル)や、入力行がパーティション化または順序付けされているかどうかなどを把握する必要がありません。
したがってPTFは、SQL開発者やデータベース管理者が、任意的な入力表または問合せに対応できる汎用的な拡張機能を提供する場合に便利です。
詳細は、多相テーブル・ファンクションの概要を参照してください。
修飾式
集計およびそれらに必要な付加詞である修飾式によって、プログラムが明確になりプログラマの生産性が向上します。
Oracle Databaseの12cリリース2では、非スカラー・データ型の値を式を使用して提供することができました(ネストした表の型コンストラクタを使用するなど)。Oracle Databaseリリース18cからは、コンストラクタが抽象データ型の値を提供するのと同じように、どんなPL/SQL値も(たとえばレコードや連想配列用に)式を使用して提供できます。PL/SQLでは"修飾式"および"集計"と呼び、SQL用語では"型コンストラクタ"と呼びますが、両者の機能は同じです。
構文およびセマンティクスの詳細は、修飾式の概要およびqualified_expression ::=を参照してください。
非推奨となった機能
次の機能は今回のリリースで非推奨となり、今後のリリースではサポートされない可能性があります。
コマンド 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ユニットおよびコンパイル・パラメータを参照してください。
サポート対象外機能
19cでサポート対象外になったPL/SQL言語リファレンスの機能はありません。
ノート:
Oracle Databaseアドバンスト・キューイングは、Oracle Database 19cでサポートが終了したOracle Streamsとは無関係に機能強化が継続されています。
関連項目:
- Oracle Database19cのサポート対象外機能の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください