Подтвердить что ты не робот

Создание триггера в 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

4b9b3361

Ответ 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.