Oracle: заявления сталкиваются друг с другом - PullRequest
0 голосов
/ 18 марта 2020

Я не владею Oracle и тестирую автоинкрементный триггер, необходимый для более старых версий, где IDENTITY пока недоступен.

CREATE TABLE stuff (
    id int PRIMARY KEY,
    data varchar(255)
);

CREATE SEQUENCE stuff_sequence;
CREATE TRIGGER test
BEFORE INSERT ON stuff
FOR EACH ROW
BEGIN
    SELECT stuff_sequence.nextval INTO :new.id FROM dual;
END;

INSERT INTO stuff(data) VALUES('test');

Использование SQL Developer, Я могу запустить оператор CREATE TABLE, а затем оператор CREATE SEQUENCE, но когда я запускаю оператор CREATE TRIGGER, он также выделяет оператор INSERT, а затем жалуется на `Обнаружен символ" INSERT ". Очевидно, что если я пытаюсь запустить весь лот как один скрипт, я получаю ту же ошибку.

Что здесь происходит, и как мне это исправить?

1 Ответ

4 голосов
/ 18 марта 2020

Просто поставьте / в конце кода триггера. Который представляет конец кода над ним.

CREATE TRIGGER test
BEFORE INSERT ON stuff
FOR EACH ROW
BEGIN
    SELECT stuff_sequence.nextval INTO :new.id FROM dual;
END;
/ -- this

INSERT INTO stuff(data) VALUES('test');

/ во время ввода DML или DDL или PL / SQL означает «завершить текущий оператор, выполнить его и сохранить в Буфер SQLPLUS "и / требуется в многострочном коде, чтобы указать, что код заканчивается здесь.

Cheers !!

...