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)