Prise en charge des citations en bloc

Les procédures stockées sont définies comme un bloc ou un corps composé de nombreuses lignes de texte. Un mécanisme de citation en bloc est fourni pour faciliter la définition du corps de la procédure et rendre le contenu plus lisible pour le débogage et l'apprentissage.

Une section de texte délimitée par BEGIN_PROC et END_PROC est un bloc de citation. Exemple :
CREATE OR REPLACE PROCEDURE name() RETURNS INT4 LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    string varchar;
BEGIN
    string := 'This string is quoted';
END;
END_PROC;

Comme le montre l'exemple, les guillemets ne sont pas échappés à l'intérieur de la chaîne entre guillemets. Le contenu de la chaîne est toujours écrit littéralement. Les barres obliques inversées n'ont pas de signification particulière.

Le corps de la procédure stockée est en texte clair par défaut. Les utilisateurs privilégiés peuvent utiliser la commande SHOW PROCEDURE VERBOSE pour examiner la procédure stockée. Si nécessaire, vous pouvez "cacher" le code de procédure lorsque vous créez la procédure.

Les guillemets sont destinés à être utilisés uniquement dans les citations du corps de NZPLSQL ou dans l'invocation de procédures stockées. Les commandes d'exécution CALL et EXEC[UTE[ PROCEDURE]] les prennent en charge, mais pas SELECT. Ils peuvent être utilisés dans le corps d'une procédure stockée pour construire des instructions DDL lorsqu'ils sont autorisés, mais ils n'ont aucune incidence sur les citations dans le corps de la procédure. S'ils sont utilisés dans le corps du texte, assurez-vous que les deux mots-clés sont en nombre égal et qu'ils correspondent (un BEGIN_PROC apparaît avant le END_PROC correspondant) afin d'éviter les erreurs. Si la logique de votre programme exige qu'ils ne correspondent pas, ils doivent être séparés (c'est-à-dire 'BEGIN_' || 'PROC').

BEGIN_PROC et END_PROC peuvent apparaître à l'intérieur d'une chaîne de caractères entre guillemets simples ou doubles dans des instructions SQL normales si les instructions SQL ne se trouvent pas à l'intérieur d'un bloc de guillemets. Par exemple :
select "BEGIN_PROC" from <table>;
insert into <table> values ('BEGIN_PROC');
Si vous voulez le faire à l'intérieur d'un bloc de citations, vous devez avoir un END_PROC correspondant. Par exemple :
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;
Comme les mots-clés BEGIN_PROC et END_PROC imbriqués n'ont pas d'incidence sur les citations, l'exemple suivant n'est pas pris en charge :
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;