PL / SQL проверяет исключение SQL, если все прошло нормально или нет? - PullRequest
1 голос
/ 27 марта 2012

У меня есть несколько синтаксисов SQL (выбор / обновление / вставка), которые я буду запускать внутри PL / SQL один за другим

есть ли способ проверить, правильно ли выполнен каждый синтаксис и есть ли какая-либо ошибкаон не остановит весь PL / SQL, он просто вернет переменную "OK" или "Not OK", чтобы я мог использовать ее с IF?

UPDATE

Я придумал эту функцию, но она, похоже, не работает, она всегда возвращает 0!

create or replace
FUNCTION EXECUTE_SQL(
      V_SQL IN VARCHAR2 )
    RETURN NUMBER
  AS
    V_RESULTS NUMBER := 1;
  BEGIN
    BEGIN
      EXECUTE IMMEDIATE V_SQL;
    EXCEPTION
    WHEN OTHERS THEN
      -- the following line is just for debugging!
      dbms_output.put_line(SQLERRM);
      V_RESULTS:= 0;
    END;
    RETURN V_RESULTS;
  END EXECUTE_SQL;

что не так с ней (если есть)!веселит

Ответы [ 3 ]

4 голосов
/ 27 марта 2012
if sql%rowcount > 0 then
   -- insert or update statement affected sql%rowcount rows
end if;

Что касается правильного синтаксиса: если синтаксис неправильный, он даже не скомпилируется.Если есть ошибка согласованности данных (например, ошибка деления на 0 или нарушение первичного ключа), будет выдано исключение.Такое исключение может быть перехвачено в обработчиках исключений

В обработчике исключений вы можете проверить sqlerrm для более подробной информации:

 begin
    update t set x = ...
 exception when others then
    dbms_output.put_line(SQLERRM);
 end;

ТамЕсть также несколько предопределенных исключений , которые вы можете проверить:

 begin
           update t set x = ...
 exception
    when DUP_VAL_ON_INDEX
         -- primary key or unique key violation
    when OTHERS
         -- other kind of exception
  end;
2 голосов
/ 27 марта 2012

Если синтаксис неправильный, весь блок будет недействительным, поэтому вы не сможете его запустить.

Если вы хотите выполнить все операторы, несмотря на то, что можно вызвать исключение, выможно:

BEGIN

  BEGIN
    statement1;
  EXCEPTION 
    when exception1 then 
      some commands or null;
    when exception2 then 
      some commands or null;
  END;

  BEGIN
    statement2;
  EXCEPTION 
    when exception3 then 
      some commands or null;
    when exception4 then 
      some commands or null;
  END;

  etc.
END;
0 голосов
/ 27 марта 2012

Запись show errors

begin 
           update t set x = ... 
 exception 
    when DUP_VAL_ON_INDEX 
         -- primary key or unique key violation 
    when OTHERS 
         -- other kind of exception 
  end; 
/
show errors

Он покажет ошибки, если таковые имеются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...