使用 SQL Server,我可以通过 SQL Server Management Studio 或任何其他客户端执行具有完整过程逻辑的临时 T-SQL 代码。我已经开始使用 PostgreSQL 并且遇到了一点不同,因为 PGSQL 需要将任何逻辑嵌入到函数中。
有没有办法在不创建执行函数的情况下执行 PL/PGSQL 代码?
使用 SQL Server,我可以通过 SQL Server Management Studio 或任何其他客户端执行具有完整过程逻辑的临时 T-SQL 代码。我已经开始使用 PostgreSQL 并且遇到了一点不同,因为 PGSQL 需要将任何逻辑嵌入到函数中。
有没有办法在不创建执行函数的情况下执行 PL/PGSQL 代码?
Postgres 9
DO $$
-- declare
BEGIN
/* pl/pgsql here */
END $$;
还没有。9.0 版(仍然是 alpha)将有这个选项(做),你必须等到它发布。
我很难让这个工作,因为在正确的地方添加分号是相当严格的。但是一旦你习惯了它就会很好地工作。当然,除了无法返回记录之外,您还可以提出通知和异常,并执行其他解决方法,例如使用临时表,正如@ErwinBrandstetter 在上面的评论中指出的那样。
例如:
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;