使用SQL Server,我可以通过SQL Server Management Studio或任何其他客户端使用完整的过程逻辑执行代码ad hoc T-SQL代码。我已经开始使用PostgreSQL并且遇到了一些区别,因为PGSQL需要在函数中嵌入任何逻辑。
有没有办法在不创建执行函数的情况下执行PL / PGSQL代码?
答案 0 :(得分:59)
Postgres 9
DO $$
-- declare
BEGIN
/* pl/pgsql here */
END $$;
答案 1 :(得分:6)
不,还没有。版本9.0(仍然是alpha)将具有此选项(do),您必须等到它被释放。
答案 2 :(得分:1)
我努力让这项工作得以实现,因为在正确的地方添加半冒号相当严格。但是,一旦你习惯了它,它运作良好。除了无法返回记录当然,你可以提出通知和&异常并执行其他变通方法,如使用临时表,如上面的注释中指出的@ErwinBrandstetter。
e.g:
DO
$$
BEGIN
IF EXISTS(SELECT 'any rows?'
FROM {your_table}
WHERE {your_column} = 'blah')
THEN
RAISE NOTICE 'record exists';
ELSE
RAISE EXCEPTION 'record does not exist';
END IF;
DROP TABLE IF EXISTS foo;
CREATE TEMP TABLE foo AS
SELECT 'bar'::character varying(5) as baz;
END
$$;
SELECT * FROM foo;