如何在不创建函数的情况下执行pl / pgsql代码?

时间:2010-04-02 22:21:22

标签: postgresql plpgsql

使用SQL Server,我可以通过SQL Server Management Studio或任何其他客户端使用完整的过程逻辑执行代码ad hoc T-SQL代码。我已经开始使用PostgreSQL并且遇到了一些区别,因为PGSQL需要在函数中嵌入任何逻辑。

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

3 个答案:

答案 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;