在Oracle的PL/SQL中,我可以使用包定义创建基于会话的全局变量.使用Postgresql的PLpg/SQL,它似乎不可能,因为没有包,只有独立的程序和功能.
以下是PL/SQL将g_spool_key声明为全局的语法...
CREATE OR REPLACE PACKAGE tox IS g_spool_key spool.key%TYPE := NULL; TYPE t_spool IS REF CURSOR RETURN spool%ROWTYPE; PROCEDURE begin_spool; PROCEDURE into_spool ( in_txt IN spool.txt%TYPE ); PROCEDURE reset_spool; FUNCTION end_spool RETURN t_spool; FUNCTION timestamp RETURN VARCHAR2; END tox;
如何使用PLpg/SQL实现基于会话的全局变量?
您可以在postgresql.conf中定义一些自定义变量类,并将其用作存储过程中的连接变量.查看文档.
自定义变量类"imos"的用法示例:
imos=> set imos.testvar to 'foobar'; SET Time: 0.379 ms imos=> show imos.testvar; imos.testvar -------------- foobar (1 row) Time: 0.333 ms imos=> set imos.testvar to 'bazbar'; SET Time: 0.144 ms imos=> show imos.testvar; imos.testvar -------------- bazbar (1 row)
在存储过程中,您可以使用内置函数current_setting('imos.testvar').