【问题标题】:Trying to execute postgres function using Execute尝试使用 Execute 执行 postgres 函数
【发布时间】:2013-06-05 10:48:05
【问题描述】:
        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...

【问题讨论】:

    标签: postgresql-9.2


    【解决方案1】:

    首先,由于您似乎是 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!

    【讨论】:

    • 先生感谢您的提示,我会记住,1. 我正在检查数据库中是否存在模式名称和表名称。 2. 模式和表名作为参数传递,如果这些不存在,我想从传递的参数和子查询的结果创建一个新的模式和表
    • @Anusha 我建议您编辑您的问题以包含此信息。
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多