#plsql #oracle11g #database-trigger
#plsql #oracle11g #база данных-триггер
Вопрос:
Я новичок в PL / SQL. Я использую oracle 11g XE вместе с sql developer. Я пытаюсь создать, чтобы создать триггер после вставки следующим образом
create or replace trigger tr1
after
insert ON
employee
for each row
begin
print :new.emp_id;
end;
Таблица employee выглядит следующим образом
create table employee
( emp_id varchar2(5) primary key,
emp_name varchar2(10),
salary number,
company varchar2(10) foreign key references companies(comp_name)
);
Когда я запускаю инструкцию, я получаю окно ввода привязок для переменной привязки: new. Но я был смущен тем, зачем мне нужно вводить значение для :new, поскольку это псевдозапись. Затем я ввел ’employee’ в качестве значений для :new . Теперь я получаю следующую ошибку.
Error(2,8): PLS-00103: Encountered the symbol "" when expecting one of the following: := . ( @ % ; The symbol ":=" was substituted for "" to continue.
Комментарии:
1. При компиляции SQL developer попросит вас ввести переменную привязки. Просто оставьте их пустыми. Они не являются источником ошибки здесь. Когда триггер запускается при вставке, значение :new.emp_id будет вставлено в таблицу. Она будет заполнена автоматически. Скомпилируйте триггер, затем попробуйте вставить для тестирования.
2. @Hawk. Спасибо за ответ. Я его скомпилировал. Но у него ошибка, которую я указал в вопросе.
3. Если проблема в том, что разработчик SQL выдает подсказки, пожалуйста, отметьте свой вопрос.
sqldeveloper
Я сам с этим не знаком.
Ответ №1:
Ваша проблема не в :new
псевдозаписи. Ошибка возникает из-за использования print , которое используется для печати переменной привязки, используемой в успешном блоке PL / SQL или используемой в команде ВЫПОЛНЕНИЯ. Например, вы можете использовать это так:
VARIABLE n NUMBER
BEGIN
:n := 1;
END;
/
Затем
PRINT n;
Но если вы хотите проверить вставляемое значение, вы можете использовать DBMS_OUTPUT .PUT_LINE вот так:
create or replace trigger tr1
after
insert ON
employee
for each row
BEGIN
dbms_output.put_line(:new.emp_id);
END;
/
Включите окно DBMS_OUTPUT в вашем SQL Developer, затем запустите
insert into employee values(1, 'empName', 1000, 'ABC');
Вы увидите 1
распечатанный файл.
Однако вы всегда можете проверить значение из таблицы. Потому что значение должно быть уже вставлено в таблицу. Вы можете просто запросить.