如果存在则更新,否则根据复选框插入新记录

时间:2012-02-28 16:02:32

标签: plsql oracle-apex

我在使用复选框和插入/更新语句时遇到了一些问题。目前,我有一份可用信用卡报告,每行旁边都有一个复选框。用户可以选择他们想要批准的数量,然后点击提交按钮以更新他们的个人资料。这就是我被困住的地方。

我想有一个PSQL流程,它将根据是否存在所述信用卡来更新用户配置文件表。如果它不存在,那么我们插入所有相关信息。如果它已经存在,我想要做的就是通过将'Approved_flag'更改为'Y'来更新该记录。我编写了这个代码块,它插入了新的记录,并且工作正常:

FOR i in 1..APEX_APPLICATION.G_F01.count
 LOOP
  INSERT INTO ls_credit_cards(credit_card_id, created_by, created_on, card_id,    user_id, approved_flag)
  VALUES (apex_application.g_f01(i), :F125_USER_ID,sysdate, :P58_CARDS, :P58_USER, 'Y');
 END LOOP;

我理解ORACLE不支持通常的if / else命令,所以我对此进行了一些研究,发现我应该使用MERGE命令,但是我看到的所有内容都使得它使用了两个表。我所使用的只是一个,所有数据都来自报告/复选框,所以我在这里有点不知所措。我是否仍然可以在此实例中使用MERGE命令,还是还有其他更适合我目的的东西?

1 个答案:

答案 0 :(得分:2)

您可以使用MERGE。您只需从“DUAL”

中选择数据即可
MERGE INTO ls_credit_cards dest
  USING( SELECT apex_application.g_f01(i) credit_card_id, 
                :F125_USER_ID created_by,
                sysdate created_on, 
                :P58_CARDS card_id, 
                :P58_USER user_id, 
                'Y' approved_flag
           FROM dual) src
      ON( dest.credit_card_id = src.credit_card_id )
 WHEN MATCHED 
 THEN
   UPDATE SET dest.approved_flag = src.approved_flag
 WHEN NOT MATCHED
 THEN
   INSERT( credit_card_id, 
           created_by,
           created_on,
           card_id,
           user_id,
           approved_flag )
     VALUES( src.credit_card_id,
             src.created_by,
             src.created_on,
             src.card_id,
             src.user_id,
             src.approved_flag );