Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgress函数在循环和进入时未按预期工作_Postgresql_Function_Plpgsql - Fatal编程技术网

Postgresql Postgress函数在循环和进入时未按预期工作

Postgresql Postgress函数在循环和进入时未按预期工作,postgresql,function,plpgsql,Postgresql,Function,Plpgsql,我有以下程序 CREATE OR REPLACE FUNCTION createtestdata( ) RETURNS boolean LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ DECLARE proj RECORD; ruleid integer; emailtemplateid integer; otherTemplates

我有以下程序

CREATE OR REPLACE FUNCTION createtestdata(
    )
    RETURNS boolean
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
    DECLARE
        proj RECORD;
        ruleid integer;
        emailtemplateid integer;
        otherTemplates RECORD;
        markdoenTemplateId integer;
        pdfTemplateId integer;
        jsonTemplateId integer;
    BEGIN
    

        FOR proj IN
            SELECT p.id AS project_id FROM project p
            WHERE p.id != 10409 and p.projecttype='software'
            ORDER BY p.id
        LOOP
            select  "ID" from "TEST_TEMPLATES" 
            where "PROJECT_ID" = proj.project_id AND "TYPE" =1 ORDER BY RANDOM() LIMIT 1
            INTO emailtemplateid;
            RAISE NOTICE 'template id is %...', emailtemplateid;

            select  "ID", "TYPE" from "TEST_TEMPLATES" 
            where "PROJECT_ID" = proj.project_id AND "TYPE" IN (2,4,5)
            ORDER BY RANDOM() LIMIT 1
            INTO otherTemplates;

            RAISE NOTICE 'OTHER TEMPLATES %',   otherTemplates; 
            RAISE NOTICE 'inserting records for project id %...', proj.project_id;

            pdfTemplateId = NULL;
            markdoenTemplateId = NULL;
            jsonTemplateId = NULL;

            IF otherTemplates."TYPE" = 2 THEN
                pdfTemplateId = otherTemplates."ID";
            ELSIF otherTemplates."TYPE" = 4 THEN
                markdoenTemplateId = otherTemplates."ID";
            ELSIF otherTemplates."TYPE" = 5 THEN
                jsonTemplateId = otherTemplates."ID";
            END IF;
            RAISE NOTICE 'PDF TEMP IS %... MKDN TEMP IS %... JSON TEMP IS %', 
            pdfTemplateId, markdoenTemplateId, jsonTemplateId;  

            INSERT INTO "TEST_RULES"(
                "BEFORE_NOF_DAYS", "CREATED", "CREATED_BY", "CRON_EXPRESSION", "IS_ACTIVE", 
                "IS_DELETED", "MODIFIED", "MODIFIED_BY", "NAME", 
                "PROJECT_ID", "SCHEDULE_TIME", "TRIGGER_TYPE", "VERSION_PATTERN")
            VALUES (null, now(), 'admin', null, true, 
                    false, now(), 'admin', 'rule for release project ' || proj.project_id, 
                    proj.project_id, null, 2, null) 
            RETURNING "ID" INTO ruleId;

            RAISE NOTICE 'Inserting email action for Rule id just created is %...', ruleId;


            
            INSERT INTO "TEST_RULE_ACTIONS"(
                "ACTION_TYPE", "CONFLUENCE_INSTANCE_ID", "CREATED", "CREATED_BY", "EMAIL_FROM", 
                "EXTERNAL_USERS", "IS_DELETED", "JIRA_GROUPS", "JIRA_USERS", "JSON_TEMPLATE_ID", "MARKDOWN_TEMPLATE_ID",
                "MODIFIED", "MODIFIED_BY", "NAME", 
                "PAGE_LABEL", "PARENT_ID", "PDF_TEMPLATE_ID", "PORTAL_ID", "POST_END_POINT", "POST_PASSWORD", 
                "POST_TEMPLATE_TYPE", "POST_TYPE", "POST_USER_NAME", "REPLY_TO", "RULE_ID", 
                "SEND_EMAIL_AS_BCC", "SEQUENCE_NUMBER", "SPACE_KEY", "TEMPLATE_ID", "TEMPLATE_TYPE_ID")
            VALUES (1, NULL, NOW(), 'admin', 'stest@test.com', 
                '', false, 'arn-users', 'admin', jsonTemplateId, markdoenTemplateId, 
                now(), 'admin', 'email action configured for project ' || proj.project_id, 
                NULL, 0, pdfTemplateId, 0, NULL, NULL, 
                NULL, 'page', NULL, 'stest@test.com', ruleId, 
                    false, 1, NULL, emailtemplateid, 1);

        END LOOP;

        RETURN true;
    END;
$BODY$;
当我运行函数时,我得到输出

psql:dproc.sql:122: NOTICE:  template id is 3425...
psql:dproc.sql:122: NOTICE:  project id 10494...
psql:dproc.sql:122: NOTICE:  OTHER TEMPLATES (1709,5)
psql:dproc.sql:122: NOTICE:  PDF TEMP IS <NULL>... MKDN TEMP IS <NULL>... JSON TEMP IS 1709
psql:dproc.sql:122: NOTICE:  inserting records for project id 10497...
**psql:dproc.sql:122: NOTICE:  Inserting email action for Rule id just created is <NULL>...**
psql:dproc.sql:122:注意:模板id是3425。。。
psql:dproc.sql:122:注意:项目id 10494。。。
psql:dproc.sql:122:注意:其他模板(1709,5)
注意:PDF临时文件是。。。MKDN温度是。。。JSON温度是1709
psql:dproc.sql:122:注意:插入项目id 10497的记录。。。
**注意:为刚刚创建的规则id插入电子邮件操作是**
最后一行“为刚刚创建的规则id插入电子邮件操作”是错误的,insert语句在我的本地SQL上正常工作。但这对AWS博士后不起作用


另外,如果我将insert语句放在循环中的第一个语句中,它也可以工作。但是,另外两种说法与您的问题无关,但是:您应该真正避免那些可怕的引用标识符。他们的麻烦远比他们值得的多。你确定你发布的代码就是正在运行的代码吗?您的
通知
行中的
PDF TEMP是
插入项目id的记录在您的输出中出现问题。当您将
INSERT
移动到顶部时,哪两条语句不起作用?当您说is在本地工作但不在AWS上工作时,您是指整个函数还是仅指
INSERT
?另外,这与在函数中移动
插入
有什么关系?问题在于ruleid integer;语句中使用的是ruleId。此函数在本地windows postgres上工作,但在AWS rds postgresql上失败。我纠正了变量的情况,它起了作用