60

使用 SQL Server,我可以通过 SQL Server Management Studio 或任何其他客户端执行具有完整过程逻辑的临时 T-SQL 代码。我已经开始使用 PostgreSQL 并且遇到了一点不同,因为 PGSQL 需要将任何逻辑嵌入到函数中。

有没有办法在不创建执行函数的情况下执行 PL/PGSQL 代码?

4

3 回答 3

77

Postgres 9

DO $$ 
-- declare
BEGIN
  /* pl/pgsql here */
END $$;
于 2010-10-25T16:44:27.417 回答
6

还没有。9.0 版(仍然是 alpha)将有这个选项(做),你必须等到它发布。

于 2010-04-02T22:31:59.717 回答
1

我很难让这个工作,因为在正确的地方添加分号是相当严格的。但是一旦你习惯了它就会很好地工作。当然,除了无法返回记录之外,您还可以提出通知和异常,并执行其他解决方法,例如使用临时表,正如@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;
于 2017-12-06T04:06:20.057 回答