Use MERGE statement in a stored procedure with Informix

被刻印的时光 ゝ 提交于 2019-12-11 05:08:48

问题


I have a stored procedure like this : http://tinyurl.com/pbk8qfb

CREATE PROCEDURE PS_TAB_TSEN(NOMFIC VARCHAR(70), LIBSEN VARCHAR(35),
                             CODAPPFOF VARCHAR(3))

    DEFINE NUMINTNAV VARCHAR(10);

    BEGIN;

    LET NUMINTNAV = '0';
    SELECT TO_CHAR(NUM_INT_NAV) INTO NUMINTNAV
      FROM TAB_INAV WHERE NOM_FIC = NOMFIC;

    MERGE INTO TAB_TSEN T
    USING (SELECT COD_SEN, LIBSEN AS LIB_SEN, CODAPPFOF AS COD_APP_FOF 
             FROM TAB_TSEN 
            WHERE COD_SEN = NUMINTNAV) AS S
    ON (T.COD_SEN = S.COD_SEN)
    WHEN MATCHED THEN
            UPDATE SET T.COD_SEN = S.COD_SEN, T.LIB_SEN = S.LIB_SEN,
                       T.COD_APP_FOF = S.COD_APP_FOF
    WHEN NOT MATCHED THEN 
            INSERT (T.COD_SEN, T.LIB_SEN, T.COD_APP_FOF)
            VALUES (S.COD_SEN, S.LIB_SEN, S.COD_APP_FOF);

    COMMIT;

END PROCEDURE;

When I run it all is good, but when I check in the table I see no result, for the insert statement and for the update statement too.

I call it like this:

CALL PS_TAB_TSEN('~/PSS/Order/OrderList.aspx', 'Liste des commandes', 'NET');

I don't understand what is going on...


回答1:


Problem solved, I replace my stored procedure by this one :

CREATE PROCEDURE PS_TAB_TSEN(NOMFIC VARCHAR(70), LIBSEN VARCHAR(35), CODAPPFOF VARCHAR(3))
    DEFINE ISPRESENT INTEGER;
    DEFINE NUMINTNAV VARCHAR(10);

    BEGIN;

    LET NUMINTNAV = '0';
    SELECT TO_CHAR(NUM_INT_NAV) INTO NUMINTNAV FROM TAB_INAV WHERE NOM_FIC = NOMFIC;
    LET ISPRESENT = 0;
    SELECT COUNT(*) INTO ISPRESENT FROM TAB_TSEN WHERE COD_SEN = NUMINTNAV;

    IF(ISPRESENT > 0) THEN
        UPDATE TAB_TSEN SET T.COD_SEN = S.COD_SEN, T.LIB_SEN = S.LIB_SEN, T.COD_APP_FOF = S.COD_APP_FOF
    ELSE
        INSERT INTO TAB_TSEN (T.COD_SEN, T.LIB_SEN, T.COD_APP_FOF) VALUES (S.COD_SEN, S.LIB_SEN, S.COD_APP_FOF);
    END IF;

    COMMIT;

END PROCEDURE;


来源:https://stackoverflow.com/questions/21024692/use-merge-statement-in-a-stored-procedure-with-informix

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!