我在使用复选框和插入/更新语句时遇到了一些问题。目前,我有一份可用信用卡报告,每行旁边都有一个复选框。用户可以选择他们想要批准的数量,然后点击提交按钮以更新他们的个人资料。这就是我被困住的地方。
我想有一个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命令,还是还有其他更适合我目的的东西?
答案 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 );