dac*_*cot 9 oracle postgresql plsql plpgsql
在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;
Run Code Online (Sandbox Code Playgroud)
如何使用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)
Run Code Online (Sandbox Code Playgroud)
在存储过程中,您可以使用内置函数current_setting('imos.testvar').
另一种选择是创建一个临时表,并用它来存储所有临时变量
CREATE TEMPORARY TABLE tmp_vars(
name varchar(64),
value varchar(64),
PRIMARY KEY (name)
);
Run Code Online (Sandbox Code Playgroud)
您甚至可以创建一个存储过程来管理所有内容,如果表尚不存在则创建该表。一种用于检索,一种用于存储。
来自Postgresql 论坛...
所以,有几个问题......
- 你能从 plpgsql 声明全局值吗?
- 如果是这样,有没有办法避免命名空间污染?(或许相当于Oracle使用plsql包变量)
plpgsql 没有全局变量。
| 归档时间: |
|
| 查看次数: |
9878 次 |
| 最近记录: |