Конфигурация Oracle.функция «создать или заменить» создать недействительный объект - PullRequest
0 голосов
/ 23 ноября 2018

Я недавно переместил свою базу данных на новый сервер (оба Oracle 11g).На новом хосте есть странное поведение, когда я запускаю что-то вроде:

create or replace test_trigger
   before insert or update
   on test_table
   for each row
begin
   select 1 from dual;
end;
/

Созданный триггер недействителен без каких-либо ошибок в журнале.Я попытался перекомпилировать, он все еще недействителен.

Это происходит только с функцией "создать или заменить".Если я отпущу триггер и заново создам его, он будет действительным.

У меня вопрос: я что-то неправильно настроил?Как я могу это проверить?Спасибо.

1 Ответ

0 голосов
/ 23 ноября 2018

Код, который вы разместили, не будет компилироваться, ни в какой базе данных Oracle, которую я знаю.Зачем?Неверный синтаксис.

Вот демонстрация:

SQL> create or replace test_trigger
  2     before insert or update
  3     on test_table
  4     for each row
  5  begin
  6     select 1 from dual;
create or replace test_trigger
                  *
ERROR at line 1:
ORA-00922: missing or invalid option


SQL> end;
SP2-0042: unknown command "end" - rest of line ignored.
SQL> /

Итак, что с ним не так?

  • создать (или заменить) хочет знать что ты собираешься создать."Test_trigger"?Что касается Oracle, это может быть «mickey_mouse», и результат будет таким же.Это ключевое слово trigger отсутствует
  • SELECT в PL/SQL требует предложение INTO, чтобы вы могли сохранить результат во что-то
  • , чтобы иметь возможностьчтобы сделать это, вам нужно declare переменную

Вот код, который фактически компилируется:

SQL> create or replace trigger test_trigger   --> this
  2     before insert or update
  3     on test_table
  4     for each row
  5  declare
  6    l_dummy number;     --> this
  7  begin
  8     select 1
  9     into l_dummy       --> this
 10     from dual;
 11  end;
 12  /

Trigger created.

SQL>

Итак, кажется, что вы неверно истолковали реальность.

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