你如何在一个简单的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;