ブロック引用のサポート

ストアード・プロシージャーは、多数のテキスト行で構成されるブロックまたは本文として定義されます。 プロシージャー本体の定義を容易にし、デバッグや学習のために内容を読みやすくするために、ブロッククオートのメカニズムが提供されている。

BEGIN_PROC と END_PROC で囲まれたテキストのセクションがブロック引用です。 以下に例を示します。
CREATE OR REPLACE PROCEDURE name() RETURNS INT4 LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    string varchar;
BEGIN
    string := 'This string is quoted';
END;
END_PROC;

例に示したように、引用符はブロック引用ストリング内でエスケープされません。 ストリング・コンテンツは、常に文字通りに記述されます。 バックスラッシュは、特別な「エスケープ」の意味を持ちません。

ストアード・プロシージャーの本文は、デフォルトでは平文フォーマットになります。 特権ユーザは、SHOW PROCEDURE VERBOSE コマンドを使用して、ストアド プロシージャを確認することができます。 必要に応じて、プロシージャー作成の際に、プロシージャー・コードを「非表示」にすることができます。

ブロック引用は、NZPLSQL 本文の引用またはストアード・プロシージャー呼び出しにおける使用のみを意図しています。 実行コマンドの CALL および EXEC[UTE[ PROCEDURE]] はこれらをサポートしますが、SELECT はこれらをサポートしません。 ブロック引用を、ストアード・プロシージャー本文の内側で使用して、許容される場所で DDL 文を作成できますが、本文の内側では引用の意味は持ちません。 ブロック引用を本文の内側で使用する場合は、エラーを避けるために、必ず両方のキーワードの数が等しく、対をなす (BEGIN_PROC が対応する END_PROC の前に表示される) ようにしてください。 プログラム・ロジックがキーワードの不一致を指摘する場合、キーワードが分断されているはずです (すなわち、'BEGIN_' || 'PROC')。

BEGIN_PROC と END_PROC の両方は、ブロック引用の内側にない通常の SQL 文の中の、一重引用符または二重引用符で囲んだストリングの内側に記述できます。 例:
select "BEGIN_PROC" from <table>;
insert into <table> values ('BEGIN_PROC');
これをブロック引用本文の内側に記述する場合には、対応する END_PROC を記述する必要があります。 例:
CREATE OR REPLACE PROCEDURE name() RETURNS INT4 LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    string varchar;
BEGIN
    string := 'This string is quoted';
    -- This comment is the match for below BEGIN_PROC
    insert into va values ('END_PROC');
END;
END_PROC;
BEGIN_PROC キーワードと END_PROC キーワードがネストしている場合は引用の意味を持たないため、以下の例はサポートされません。
CREATE OR REPLACE PROCEDURE name() RETURNS INT4 LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    string varchar;
BEGIN
    -- The next statement is a syntax error since it is not quoted
    string := BEGIN_PROC This string is not quoted END_PROC;
END;
END_PROC;