Процедура 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 для получения более подробной информации.