Процедура Oracle PL/SQL не выполняет вставку

У меня есть процедура, в TOAD, которая должна вставить новую запись после проверки записи не существует. Создает успешно:

CREATE OR REPLACE PROCEDURE Set_Mod ( 
    p_TypeID IN NUMBER, p_LinkID IN NUMBER
    ) 
AS
    v_isExists NUMBER := 0;
    v_query varchar2(200);
BEGIN

    SELECT TypeID 
    INTO v_isExists
    FROM myTable
    WHERE  LinkID = p_LinkID 
    AND TypeID =  p_TypeID;

    IF (v_isExists = 0) THEN
       v_query := 'INSERT INTO myTable ( TypeID, LinkID ) VALUES (' || p_TypeID || ',' || p_LinkID || ')';

       EXECUTE IMMEDIATE v_query;   

    END IF;

END;

/

Я пытаюсь запустить процедуру, используя этот блок:

    BEGIN
         Set_Mod( 1, 1 );

    END;
/

Я получаю эти выходные данные скрипта в TOAD:

Procedure created.
PL/SQL procedure successfully completed.

НО никаких вставок. Не работает Любые идеи, где проблема?

1 ответ

Решение

Таким образом, логика в вашей процедуре (вроде) здравая, а ваша тестовая логика - нет:

Когда вы вызываете Set_Mod(1,1), ответы будут либо v_isExists = 1 если запрос возвращает строку или исключение PL/SQL NO_DATA_FOUND если строка не возвращается

Поскольку вы не перехватываете это исключение, процедура завершается, но вставка не происходит... v_isExists = 0 не будет истинным, кроме того, я полагаю, если вы вызываете Set_Mod(0,0).

Поэтому, пожалуйста, просмотрите эту документацию по обработке исключений PL/SQL в процедурах и найдите SO для обработки исключений PL/SQL для получения более подробной информации.

Другие вопросы по тегам