2010-01-26 5 views
0

Может кто-нибудь, пожалуйста, скажите мне, что не так в этом вопросе?Проблема в запросе триггера оракула

create trigger Test_trigger 
    before insert on Test for each row 
    begin select TestSequence.nextval into :new.id from dual; 
end;/ 

Когда я запускаю этот запрос, я получаю следующее сообщение об ошибке:

ERROR at line 1: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

;
The symbol ";" was substituted for "end-of-file" to continue.

Я использую Oracle 10g Express Edition.

ответ

0

волочить "/" является SQL * Plus синтаксис. Вероятно, вы используете инструмент SQL в Oracle Apex - в этом случае опустите «/».

+0

Спасибо. Я не знал об этом. Помнишь, что позже используя команды sql в Apex. – Ivey

0

Он должен работать, если вы удалите «/» в конце.

+0

Я попытался удалить «/». Тем не менее это не работает. – Ivey

+0

Странно, потому что я проверил ваш точный код (минус «/») в Oracle 10g XE, и он работал нормально ... (конечно, я создал фиктивную таблицу и последовательность тоже). Может быть, вы используете это как часть скрипта, а ошибка в другом месте скрипта? – Liao

+0

Пожалуйста, посмотрите на сценарий, который я включил выше. – Ivey

0

Вот сценарий, я пытаюсь выполнить:

drop index TestTableIdx1; 
drop index TestIdx1; 
drop index TestIdx2; 
drop table Test; 
drop sequence TestSequence; 
drop table TestTable; 

create table TestTable (
    objId  number  NOT NULL, 
    type  varchar(16) NOT NULL, 
    title  varchar(192)   , 
    url  varchar(192)   , 
    primary key(objId, type) 
); 

create table Test (
    id   number  NOT NULL, 
    objId  number  NOT NULL, 
    type  varchar(16) NOT NULL, 
    timeslot timestamp  NOT NULL, 
    contextId number  , 
    pubId  number  NOT NULL, 
    category varchar(24), 
    meta  varchar(32), 
    pageviews number  NOT NULL, 
    aggrLevel number  NOT NULL, 
    primary key(id) 
); 

create table Dummy (
    id int NOT NULL, 
    primary key(id) 
); 

create sequence TestSequence 
start with 1 
increment by 1 
nomaxvalue; 

create trigger Test_trigger 
before insert on Test 
for each row 
begin 
select TestSequence.nextval into :new.id from dual; 
end; 
/

create index TestTableIdx1 on TestTable (
    objId desc, type asc 
); 

create index TestIdx1 on Test (
    timeslot desc, objId desc, type asc 
); 

create index TestIdx2 on Test (
    timeslot desc 
); 

create index TestIdx3 on Test (
    objId desc, type asc 
); 

create index TestIdx4 on Test (
    contextId desc 
); 
+0

ваш скрипт работает нормально .... я проверил ваш код точно так же, как и выше, используя sqldeveloper. – poh

+0

Да, сценарий работает нормально. Хотя в этом случае я сомневаюсь, это может быть какая-то странная проблема оракула? Предполагая, что вы используете SqlDeveloper, попробуйте перезапустить его? – Liao

+0

Спасибо. Я попытался запустить его дважды. Я попробую еще раз. Я запускаю скрипт через веб-интерфейс. Не знаю, что я делаю неправильно! :( – Ivey