Обновите, если существует, в противном случае вставьте новую запись, все на основе флажков - PullRequest
1 голос
/ 28 февраля 2012

У меня проблемы с использованием флажков в сочетании с оператором вставки / обновления. На данный момент у меня есть отчет о доступных кредитных картах с флажком рядом с каждой строкой. Пользователь может выбрать любое количество утверждений, а затем нажать кнопку «Отправить», чтобы обновить свой профиль. Вот где я застрял.

Я хотел бы иметь один процесс 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 Ответ

2 голосов
/ 28 февраля 2012

Вы можете использовать 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 );
...