Должны ли процедуры и / или функции пакета DBMS_STANDARD использоваться в коде PL / SQL? - PullRequest
5 голосов
/ 26 июля 2010

Недавно я столкнулся с триггером BEFORE INSERT OR UPDATE на столе.В этом триггере автор полагается на функции INSERTING и UPDATING (обе возвращают BOOLEAN) пакета DBMS_STANDARD, чтобы определить, сработал ли триггер перед вставкой или перед обновлением.

Например:

CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
  BEFORE INSERT OR UPDATE ON CUSTOMER
  FOR EACH ROW
BEGIN
  IF INSERTING THEN
    /* Some code */
  END IF;

  IF UPDATING THEN
    /* Some other code */
  END IF;
END;

Да, я знаю, что два отдельных триггера могли быть написаны для обработки двух событий по отдельности.Суть этого вопроса не в этом.

После устранения неполадок, связанных с ошибкой, получаемой этими функциями, мы получили сообщение (из службы поддержки Oracle), что «подпрограммы dbms_standard на самом деле не предназначены для вызова пользовательскими программами»,Это правда?

Я нахожу это немного странным, учитывая, что в коде PL / SQL обычно используются другие процедуры (например, RAISE_APPLICATION_ERROR и COMMIT).

1 Ответ

9 голосов
/ 26 июля 2010

Функции INSERTING, UPDATING и DELETING специально предназначены для использования при написании кода триггера (см. документация триггера ), поэтому нет абсолютно никаких запретов на их использование.Аналогично, RAISE_APPLICATION_ERROR задокументировано и предназначено для использования разработчиками.

Имея только DESCribed DBMS_STANDARD, там, безусловно, есть некоторые функции, о которых я не знаю, и которые, возможно, не должны использоваться в вашем собственном коде (насколько я знаю), такие как GRANTEE.* Как правило, если вы можете найти официальную документацию Oracle, в которой говорится о том, как что-то использовать, то все в порядке, если вы ее используете.

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