【问题标题】:Execute multiple INSERT in a pl/sql with dependency在具有依赖关系的 pl/sql 中执行多个 INSERT
【发布时间】:2012-12-17 10:38:22
【问题描述】:

我使用 postgresql 数据库。我想在一个表中插入一行,然后在另一个表中插入另一行,该表的外键与一次 pl/sql 执行中的第一个表相关。

问题是,当我尝试插入第二个表行时,数据库假定我插入第一个表的行不存在,因为它尚未提交。我该怎么办?

例子:

REATE OR REPLACE FUNCTION "roomTypeCreate"(character varying, integer)
  RETURNS refcursor AS
$BODY$
DECLARE
curr refcursor;
counter integer;
ids integer[];
current_id integer;
count integer;
BEGIN
    SELECT COUNT(*) INTO counter FROM "RoomType" WHERE LOWER("type"::character varying) = LOWER($1::character varying);

    IF (counter > 0) THEN
        OPEN curr FOR
            SELECT false AS "Status";
        RETURN curr;
    END IF;

    INSERT INTO "RoomType"("type", "creator", "updater") VALUES ($1, $2, $2);
    SELECT currval('"RoomType_id_seq"') INTO current_id;

    SELECT ARRAY(SELECT id FROM "Rate" WHERE id>0) INTO ids;

    count = 1;

    WHILE ids[count] > 0
    LOOP
        INSERT INTO "RoomTypeRate"("type", "rate", "sun", "mon", "tue", "wed", "thu", "fri", "sat", "creator", "updater") VALUES(current_id, ids[count], 99999999, 99999999, 99999999, 99999999, 99999999, 99999999, 99999999, 0, 0);
        count = count + 1;
    END LOOP;

    OPEN curr FOR
        SELECT true AS "Status";
    RETURN curr;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

【问题讨论】:

    标签: postgresql insert sequence plpgsql


    【解决方案1】:

    尝试替换:

    INSERT INTO "RoomType"("type", "creator", "updater") VALUES ($1, $2, $2);
    SELECT currval('"RoomType_id_seq"') INTO current_id;
    

    作者:

    INSERT INTO "RoomType"("type", "creator", "updater") VALUES ($1, $2, $2) returning id into current_id;
    

    【讨论】:

    • 原来我的代码没有问题,但我在实现约束时犯了错误。我用别的东西绑定它。我的错。但是你给了我一个新的方法来实现它。为此,我感谢你。
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多