2011-09-26 2 views
-2

Je l'insertion d'un nouvel objet dans ma table de base de données, mais je continue à récupérer une exception qui indique ....
PL/SQL Exception Traduction

ERROR:insertproperty:ORA-06553: PLS-103: Encountered the symbol "EXCEPTION" when expecting one of the following: 

    begin case declare exit for function goto if loop mod null 
    package pragma procedure raise return select separate type 
    update while with <an identifier> 
    <a double-quoted delimited-identifier> <a bind variable> << 
    form table call close current define delete fetch lock insert 
    open rollback savepoint set sql execute commit forall merge 
ORA-06553: PLS-103: Encountered the symbol "EXCEPTION" when expec 

mais tout ce que je fais est un insert simple dans ...

function insert(...) 
begin 
    begin 
    select table_seq.nextval 
    into nextval 
    from dual 

    begin 
    insert into table(id, ....) 
    values(nextval,....) 
    end 
    end 
end 

les points sont tous facultatifs donc pas vraiment nécessaire.

+1

Le message d'erreur mentionne 'EXCEPTION' et vous nettoyez votre code, en supprimant' EXCEPTION', et probablement son contexte environnant. Comment sommes-nous censés aider, lorsque vous supprimez le morceau de code qui reçoit la plainte? –

+0

@ Shannon Severance Désolé à ce sujet, mais tout ce que je voulais vraiment, c'était quelqu'un pour m'expliquer l'exception. Pas vraiment quoi que ce soit à faire avec le code, d'où le nom "Exception Translation" – Kevin

Répondre

0

Votre fonction ne renvoie aucune valeur. Je pense que vous voulez faire une procédure (et ajouter quelques points-virgules, un mot-clé « AS », etc.):

CREATE OR REPLACE 
PROCEDURE insert_proc(...) 
AS 
BEGIN 
    begin 
     select table_seq.nextval 
     into nextval 
     from dual; 

     begin 
     insert into table(id, ....) 
     values(nextval,....); 
     end; 
    end; 
END insert_proc; 

Si vous utilisez Oracle 11g, vous pouvez ignorer l'appel à la table DOUBLE:

CREATE OR REPLACE 
PROCEDURE insert_proc(...) 
AS 
BEGIN 
    insert into table(id, ....) 
    values(nextvatable_seq.nextval,....); 
END insert_proc; 

NB Vous devez ajouter une section d'exception pour gérer toutes les exceptions courantes qui peuvent se produire, par ex. violations de contraintes etc.

Hope it helps

+0

ouais désolé, il renvoie une valeur à la fin, mais je n'ai pas vraiment inclure cette partie. fondamentalement à la fin s'il lance une exception puis retourne un nombre négatif que je n'ai pas inclus, mais que signifie l'exception? – Kevin

+0

Il vous manque un mot-clé dans votre déclaration de fonction. Pouvez-vous poster la syntaxe actuelle? – Ollie

3

L'erreur indique qu'il ya un problème de syntaxe près du mot clé EXCEPTION. Mais votre plan de code n'indique pas que vos blocs ont une section d'exception. Cela rend la tâche difficile pour nous.

Dans un commentaire, vous semblez indiquer qu'au moins un des blocs de votre plan comporte une section d'exception. Pouvez-vous poster le code réel (ou au moins un aperçu plus détaillé qui inclut la syntaxe de n'importe quel bloc d'exception générant l'erreur)?

En outre, dans un commentaire, il semble que vous ayez une instruction RETURN dans votre fonction qui renvoie un type de code d'état. C'est presque toujours une erreur d'utiliser des codes retour de fonctions - il est beaucoup plus robuste de simplement lancer une exception (ou mieux encore, permettre à l'exception qui a été générée de se propager). C'est généralement une erreur d'écrire une fonction dans PL/SQL qui fait du DML - si vous faites du DML, vous voulez presque toujours que cela soit fait dans une procédure.