你如何在一个简单的PostgreSQL脚本中使用variables?

例如,在MS-SQL中,可以打开一个查询窗口并运行以下命令:

DECLARE @List AS VARCHAR(8) SELECT @List = 'foobar' SELECT * FROM dbo.PubLists WHERE Name = @List 

这在PostgreSQL中是如何完成的? 可以这样做吗?

完整的答案位于PostgreSQL官方文档中 。

您可以使用新的PG9.0匿名代码块function( http://www.postgresql.org/docs/9.1/static/sql-do.html

 DO $$ DECLARE v_List TEXT; BEGIN v_List := 'foobar' ; SELECT * FROM dbo.PubLists WHERE Name = v_List; -- ... END $$; 

你也可以得到最后一个插入 ID:

 DO $$ DECLARE lastid bigint; BEGIN INSERT INTO test (name) VALUES ('Test Name') RETURNING id INTO lastid; SELECT * FROM test WHERE id = lastid; END $$; 

您可以使用:

 \set list '''foobar''' SELECT * FROM dbo.PubLists WHERE name = :list; 

那会做的

 DO $$ DECLARE a integer := 10; b integer := 20; c integer; BEGIN c := a + b; RAISE NOTICE'Value of c: %', c; END $$; 

这是在plpgsql中使用variables的一个例子:

 create table test (id int); insert into test values (1); insert into test values (2); insert into test values (3); create function test_fn() returns int as $$ declare val int := 2; begin return (SELECT id FROM test WHERE id = val); end; $$ LANGUAGE plpgsql; SELECT * FROM test_fn(); test_fn --------- 2 

看看plpgsql文档了解更多信息。

我遇到了一些其他文件,他们使用\set来声明脚本variables,但值似乎是不变的价值,我find的方式,可以像一个variables,而不是一个常量variables。

例如:

 \set Comm 150 select sal, sal+:Comm from emp 

这里sal是在表'emp'中出现的值,而comm是常数值。

Postgresql没有裸variables,你可以使用临时表。 variables只能在代码块或用户界面function中使用。

如果你需要一个空的variables,你可以使用一个临时表:

 CREATE TEMP TABLE list AS VALUES ('foobar'); SELECT dbo.PubLists.* FROM dbo.PubLists,list WHERE Name = list.column1; 

对于官方的CLI客户端“psql”,请看这里 。 和“pgAdmin3”1.10(仍在testing版)有“ pgScript ”。

我不得不这样做

 CREATE OR REPLACE FUNCTION MYFUNC() RETURNS VOID AS $$ DO $do$ BEGIN DECLARE myvar int; ... END $do$ $$ LANGUAGE SQL;