尝试使用Execute执行postgres函数

时间:2013-06-05 10:48:05

标签: postgresql-9.2

        CREATE OR REPLACE FUNCTION chkfunction(schemaname text, state text, wallmaterial text, roofmaterial text)
            RETURNS text AS
            $BODY$   
            DECLARE 
            tblinclusion text;

        BEGIN


            execute'if (SELECT exists( select schema_name FROM information_schema.schemata WHERE schema_name = '||$1 ||') )
            then
            tblinclusion:="yes";
            return tblinclusion;
            else
            tblinclusion:="no";
            return tblinclusion;'
            Using schemaname;
        END;
        $BODY$
        LANGUAGE plpgsql

但是它引发了错误:

syntax error at or near "if"
LINE 1: if (SELECT exists( select schema_name FROM information_schem...

1 个答案:

答案 0 :(得分:0)

首先,既然您似乎是Stackoverflow的新手,那么这里有一些礼节和帖子提示:

  • 始终包含相关版本信息。在这里,您可能希望包含PostgreSQL的版本信息
  • 简要描述您想要做什么
  • 包含任何相关的源代码(你做过的......好工作)
  • 包括任何错误(你做了......再次,好工作)
  • 解释您想要的结果
  • 跟进并标记答案。对于很多人来说,如果你没有给出正确答案,那么他们就无济于事。只是一个提示。

由于你没有完成上述所有工作,我只能猜测,所以我根据你的代码做了一些假设。如果模式存在,您似乎想要返回文本“是”,如果模式不存在,则返回“否”。如果这不是您的愿望,请更新问题。如果正确,似乎以下应该适合您:

CREATE OR REPLACE FUNCTION chkfunction2(schemaname text)
RETURNS text AS
$BODY$   
DECLARE 
BEGIN

    PERFORM schema_name FROM information_schema.schemata WHERE schema_name = $1; 

    IF FOUND THEN
        RETURN 'yes';
    ELSE
        RETURN 'no';
    END IF;

END;
$BODY$
LANGUAGE plpgsql

注意:我认为不需要额外的变量或声明,所以我把它们遗漏了。另请注意,我的解决方案是使用PostgreSQL 9.1进行开发和测试的

欢迎使用StackOverflow!