Esempio di simulazione di un blocco anonimo
La seguente è una procedura NZPLSQL che può eseguire blocchi anonimi:
CREATE OR REPLACE PROCEDURE exec_nzplsql_block(text) RETURNS BOOLEAN
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE lRet BOOLEAN;
DECLARE sid INTEGER;
DECLARE nm varchar;
DECLARE cr varchar;
BEGIN
sid := current_sid;
nm := 'any_block' || sid || '()';
cr = 'CREATE OR REPLACE PROCEDURE ' || nm ||
' RETURNS BOOL LANGUAGE NZPLSQL AS BEGIN_PROC '
|| $1 || ' END_PROC';
EXECUTE IMMEDIATE cr;
EXECUTE IMMEDIATE 'SELECT ' || nm;
EXECUTE IMMEDIATE 'DROP PROCEDURE ' || nm;
RETURN TRUE;
END;
END_PROC;
Segue un esempio di chiamata e di output:
MYDB.SCHEMA(USER)=> call exec_nzplsql_block(BEGIN_PROC DECLARE var char;
BEGIN var:= 'test'; raise NOTICE 'This is a %', var; END; END_PROC);
NOTICE: This is a test
EXEC_NZPLSQL_BLOCK
--------------------
t
(1 row)