2010-01-26 6 views
0

Quelqu'un peut-il s'il vous plaît dites-moi quel est le problème avec cette requête?Problème dans la requête déclencheur oracle

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

Quand je lance cette requête, je reçois l'erreur suivante:

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.

J'utilise Édition Oracle 10g Express.

Répondre

0

le "/" est SQL * Plus syntaxe. Vous utilisez probablement l'outil SQL dans Oracle Apex - dans ce cas, omettez le "/".

+0

Merci, je n'étais pas au courant de cela. en utilisant des commandes sql dans Apex. – Ivey

0

Cela devrait fonctionner si vous supprimez le "/" à la fin.

+0

J'ai essayé de supprimer "/". Cela ne marche toujours pas. – Ivey

+0

Étrange, parce que j'ai testé votre code exact (moins le "/") dans Oracle 10g XE et cela a très bien fonctionné .. (bien sûr, j'ai créé une table fictive et une séquence aussi). Peut-être que vous utilisez cela dans le cadre d'un script et l'erreur est ailleurs dans le script? – Liao

+0

Veuillez regarder le script que j'ai inclus ci-dessus. – Ivey

0

Voici le script que je suis en train d'exécuter:

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

votre script fonctionne bien .... j'ai testé votre code exactement comme ci-dessus en utilisant sqldeveloper. – poh

+0

Oui, le script fonctionne très bien. Bien que j'en doute dans ce cas, il pourrait être un problème d'oracle étrange? En supposant que vous utilisez SqlDeveloper, essayez de le redémarrer? – Liao

+0

Merci. J'ai essayé de l'exécuter deux fois. Je vais essayer de nouveau. Je cours le script à travers l'interface web. Je ne sais pas ce que je fais mal! :( – Ivey

Questions connexes