Приведенный выше процесс удаления не приводит к удалению. Он объявляет переменную, в которой есть оператор удаления, и все. Удаление не выполнено. Кроме того, вам не нужен оператор возврата. Чтобы он заработал, вам нужно выполнить инструкцию с помощью «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;