【问题标题】:How to insert value into table from auto-increment value in other table : postgressql (update and insert two table)如何将值从另一个表中的自动增量值插入到表中:postgresql(更新和插入两个表)
【发布时间】:2020-03-31 04:39:33
【问题描述】:

我正在尝试将值“stock_id_artc”int4 从表“tbl_artc”中的自动增量插入值“artc_id”插入到表“tbl_stock”中:

CREATE OR REPLACE FUNCTION "public"."update_artc"("_artc_id" int4, "_artc_name" varchar, "_artc_fourn" int4, "_artc_sector" int4, "_stock_min" int4)
      RETURNS "pg_catalog"."void" AS $BODY$
        -- Routine body goes here...

        DECLARE 
        BEGIN 
            UPDATE tbl_artc SET 
                    artc_name = _artc_name,artc_fourn=_artc_fourn,artc_sector=_artc_sector
                    WHERE artc_id = _artc_id ; 
    IF NOT FOUND THEN 
            INSERT INTO tbl_artc(artc_name,artc_fourn,artc_sector)
    VALUES
    (_artc_name,_artc_fourn,_artc_sector);
            END IF; 


    UPDATE tbl_stock
    SET stock_qt_min_alert = _stock_min
    WHERE stock_id_artc=_artc_id;
    IF NOT FOUND THEN 
    INSERT INTO tbl_stock(stock_id_artc,stock_qt_artc,stock_qt_min_alert)
    VALUES
    (artc_id,0,_stock_min);
    END IF; 

        RETURN;

    END$BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100

【问题讨论】:

  • 您的代码我无法理解。但我相信它可以简单得多。提示 1:使用INSERT ... ON CONFLICT DO UPDATE ...。提示 2:使用RETURNING 子句。
  • 非常感谢,这对我来说真的有用:

标签: postgresql function auto-increment insert-update multiple-tables


【解决方案1】:

解决方案:

CREATE OR REPLACE FUNCTION "public"."update_artc"("_artc_id" int4, "_artc_name" varchar, "_artc_fourn" int4, "_artc_sector" int4, "_stock_min" int4)
  RETURNS "pg_catalog"."void" AS $BODY$
    -- Routine body goes here...

        DECLARE tableId integer;
 BEGIN 
 UPDATE tbl_artc SET 
                artc_name = _artc_name,artc_fourn=_artc_fourn,artc_sector=_artc_sector
                WHERE artc_id = _artc_id ; 
IF NOT FOUND THEN 
        INSERT INTO tbl_artc (artc_name,artc_fourn,artc_sector) VALUES (_artc_name,_artc_fourn,_artc_sector) RETURNING artc_id INTO tableId;
        END IF; 

UPDATE tbl_stock
SET stock_qt_min_alert = _stock_min
WHERE stock_id_artc=_artc_id;
IF NOT FOUND THEN 
  INSERT INTO tbl_stock (stock_id_artc,stock_qt_artc,stock_qt_min_alert) VALUES (tableId,0,_stock_min);

END IF; 

    RETURN;

END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多