2010-06-16 31 views
4

La déclaration Oracle suivante:PLS-00103: Rencontrés le symbole "fin de fichier" dans un langage simple bloc de mise à jour

DECLARE ID NUMBER; 
BEGIN 
    UPDATE myusername.terrainMap 
    SET playerID = :playerID,tileLayout = :tileLayout 
    WHERE ID = :ID 
END; 

me donne l'erreur suivante:

ORA-06550: line 6, column 15: 
PL/SQL: ORA-00933: SQL command not properly ended 
ORA-06550: line 3, column 19: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 6, column 18: 
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

    (begin case declare end exception exit for goto if loop mod 
    null pragma raise return select update while with 
    <an identifier> <a double-quoted> 

Je suis à peu près à perte. Cela semble être une déclaration plutôt simple. Si cela aide, j'ai eu une déclaration similaire qui a fait un INSERT qui avait l'habitude de travailler, mais aujourd'hui, il m'a donné le même message.

+0

L'exécutez-vous dans SQLPlus? – MJB

Répondre

4

Ajouter un point-virgule après where id=:id

+0

J'ai évidemment besoin de plus de café. Haha merci! – rageingnonsense

+0

@rageingnonsense: pas de problème. Je me demandais si vous copiez/collé ou si le point-virgule manquant était un artefact de retaper le code. – MJB

1

Vous avez un certain nombre de problèmes ici:

  1. point-virgule manquant (comme MJB a vu)

  2. :ID fait référence à un in- variable liée, de sorte que votre déclaration locale (DECLARE ID NUMBER;) n'est pas utilisée.

  3. Vous utilisez un nom de variable qui (apparemment) est le même nom qu'une colonne dans votre table. Si vous essayez d'utiliser votre variable locale ID, la requête ne l'utilisera toujours pas, sauf si vous utilisez une étiquette de bloc.

Cela dit, il semble que vous envoyez ID dans une variable de liaison de toute façon, il est plus probable que vous devriez juste retirer la déclaration du bloc.

+0

C'est pourquoi j'ai demandé si c'était dans SQLPlus. Je ne pouvais pas comprendre comment ses vars liants étaient utilisés. Et je pense que ce n'est peut-être pas vraiment ce qu'il fait - c'est une version test du code qu'il pensait devoir exécuter. – MJB

-1

En plus de la précédente, vous devez éviter les espaces entre le fonctionnement égale,: et la valeur comme ceci:

SQL> BEGIN 
2 IF x > y THEN high := x; END IF; -- correct 

3 IF x > y THEN high := x; ENDIF; -- incorrect 

4 END; 

5/

END; 
ERROR at line 4: 
ORA-06550: line 4, column 4: 
PLS-00103: Encountered the symbol ";" when expecting one of the following: 
if 

visitez le site Web pour en savoir plus .... https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/fundamentals.htm#LNPLS002