Создание триггера в Oracle Express
Я пытался сделать что-то вроде автоматического увеличения в Oracle 11g Express и SQL Developer.
Я очень мало знаю об Oracle, и я также новичок в триггерах.
Я попытался запустить это, но я не знаю, как это сделать правильно.
CREATE TABLE theschema.thetable
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
CREATE SEQUENCE theschema.test1_sequence
START WITH 1
INCREMENT BY 1;
create or replace trigger insert_nums
before insert on theschema.thetable
for each row
begin
select test1_sequence.nextval into :new.id from dual;
end;
/
Когда я пытаюсь создать триггер, я получаю экран, который запрашивает у меня некоторые "привязки".
В диалоговом окне установлен только один флажок "null". Что это значит и как мне это сделать?
a script, который работает правильно?
Какие-либо меры предосторожности при выполнении такого рода "автоинкремент"?
![Enter binds]()
Ответы
Ответ 1
Кажется, что разработчик SQL считает, что вы используете простой DML (манипулирование данными) script, а не DDL (определение данных). Он также считает, что :new.id
является связующей переменной.
Почему это происходит, я не знаю; Я не могу воспроизвести его в Oracle SQL Developer 2.1.
Попробуйте открыть новое окно рабочего листа SQL в схеме theschema
и выполните "цельный" script (не оператор), нажав F5 (не F9).
Ответ 2
Вот как я решил эту проблему, поставил "set define off"; перед командой:
set define off;
create or replace trigger [...]
[...]
end;
/
Затем выделите обе команды и нажмите F9 для запуска.
Или вы можете запускать все команды с помощью F5.
Кажется, что если команды выполняются separetly с F9, то определение set off не влияет.
Ответ 3
В моем случае решение вводило "newrow" для "new" и "oldrow" для "old" в качестве значений для привязок...
Ответ 4
Я новичок в этом, поэтому помните об этом, когда я даю свой ответ.
Я думаю, проблема в том, что код
create or replace trigger insert_nums
before insert on theschema.thetable
for each row
begin
select test1_sequence.nextval into :new.id from dual;
end;
На самом деле это script, а не прямой SQL-оператор. Следовательно, вам нужно запустить "Run Script". Я обнаружил, что когда у меня был рабочий лист, открытый в SQL Developer, если бы у меня на рабочем столе был любой код для триггера, как показано выше, я даже попытался запустить оператор, который SQL Developer заглянул бы в рабочий лист и попытался запустить script. Чтобы остановить это, мне пришлось прокомментировать код.
И если мне захотелось запустить код для триггера, я должен был открыть новый рабочий лист, поместить там код и сделать RUN script.