Оцените переключатель типа и выполните действие - PullRequest
0 голосов
/ 14 июля 2020

У меня есть несколько полей в диалоговом окне, в том числе поле переключения. Здесь пользователь выбирает между [Да] и [Нет].

Если теперь пользователь выбрал [Нет], а затем щелкнул кнопку [Обновить], все записи данных с соответствующим идентификатором должны быть удалены в таблице .

У меня для этого есть два процесса.

  1. Удалить - процесс
  2. Обновление - процесс

Удалить - процесс

    declare
        l_script varchar2(32000);
    begin
       if :P161000_ENTI_ID = 0 then
          l_script := 'DELETE 
                            FROM 
                                TBL_MGM_MI_TO_ENTI 
                            WHERE 
                                MIL_PKEY =  :P161000_PKEY
                                ';
           
        end if;
        return;

end;

Но не работает. Если пользователь выберет [Нет], записи данных будут удалены в таблице. Процесс обновления сохраняет другие значения из диалогового окна в другой таблице. Это работает.

Как я могу теперь запросить [Да] [Нет]? Как я могу оценить поле переключателя в зависимости от того, что было выбрано?

1 Ответ

0 голосов
/ 14 июля 2020

Приведенный выше процесс удаления не приводит к удалению. Он объявляет переменную, в которой есть оператор удаления, и все. Удаление не выполнено. Кроме того, вам не нужен оператор возврата. Чтобы он заработал, вам нужно выполнить инструкцию с помощью «EXECUTE IMMEDIATE»

DECLARE
  l_script VARCHAR2(32000);
BEGIN
  IF :P161000_ENTI_ID = 0 THEN
    l_script := 'DELETE FROM TBL_MGM_MI_TO_ENTI WHERE MIL_PKEY =  :PKEY ';
    EXECUTE IMMEDIATE l_script USING :P161000_PKEY;
  END IF;
END;

Однако в этом случае вы можете сделать это намного проще, просто выполнив dml в своем блоке без использования EXECUTE IMMEDIATE.

BEGIN
  IF :P161000_ENTI_ID = 0 THEN
    DELETE FROM  TBL_MGM_MI_TO_ENTI WHERE  MIL_PKEY =  :P161000_PKEY;
  END IF;
END;

или ... вы можете поставить условие на стороне сервера для процесса удаления типа ITEM is Value. Установите для элемента значение P161000_ENTI_ID и значение 0, а затем просто потребуется оператор удаления.

DELETE FROM  TBL_MGM_MI_TO_ENTI WHERE  MIL_PKEY =  :P161000_PKEY;
...