2014-10-30 90 views
0
Version: postgreSQL 9.3 

我已经写了以下程序:为什么我不能在匿名plpg块中执行函数?

CREATE OR REPLACE FUNCTION drop_if_exists(table_name name, schema_name name) RETURNS integer AS $$ 
BEGIN 
    IF(SELECT EXISTS(
      SELECT * 
      FROM pg_class c 
      JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
      WHERE relname = table_name AND 
       nspname = schema_name 
     ) as ex) = true 
     THEN 
      execute 'DROP TABLE ' || schema_name || '.' || table_name; 
      RETURN 1; 
     ELSE 
      RETURN 0; 
    END IF; 
END 
$$ LANGUAGE plpgsql; 

DO $$ 
BEGIN 
    drop_if_exists('ords', 'public'); --ERROR: syntax error at or near drop_if_exists" 
END 
$$ LANGUAGE plpgsql; 

做什么用的代码有问题吗?

回答

1

缺失perform是其中之一。没有检查其他错误。

perform drop_if_exists(... 
+0

@Nick当然。谢谢。 – 2014-10-30 11:53:11

+0

是的,它工作正常。谢谢。 – 2014-10-30 12:02:28

相关问题