【问题标题】:Update if exists, else insert new record, all based on checkboxes如果存在则更新,否则插入新记录,全部基于复选框
【发布时间】:2012-02-28 16:02:32
【问题描述】:

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

我希望有一个 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 命令吗,或者还有什么可以更好地满足我的目的吗?

【问题讨论】:

    标签: plsql oracle-apex


    【解决方案1】:

    您可以使用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 );
    

    【讨论】:

    • 我讨厌成为烦恼,但这对我来说并不是 100% 有效。它可以很好地更新现有数据,但由于某种原因它仍然不会插入新数据。没有错误消息,所以我又不知道为什么它会放入新记录。
    • @user1200142 - 您确定要插入新行吗?或者,也许我对要匹配哪些列的猜测不正确,您需要匹配的不仅仅是CREDIT_CARD_ID 列。也许您还需要匹配其他一些 ID 列?
    • 问题是我自己创造的。我错误地将信用卡 ID 分配给了要作为新插入的卡。如果我对 ID 进行硬编码,它会完美运行。这只是意味着我必须做一些创造性的问题解决!非常感谢,这是完美的!
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2015-07-04
    • 2018-04-02
    • 2019-06-23
    • 2022-01-09
    相关资源
    最近更新 更多