2010-07-05 2 views
1

La simple déclaration suivante:ORA-00933: commande SQL pas correctement terminé (en simple déclaration d'insertion)

INSERT INTO mydb.inventory (itemID) VALUES (:itemID) WHERE playerID = :ID; 

génère l'erreur suivante:

ORA-00933: SQL command not properly ended 

Je l'ai essayé sans semi deux points aussi bien qu'avec, mais les deux me donnent l'erreur. Je suis certain que les variables sont également liées.

Toutes mes recherches sur Google montrent que cela est généralement causé par une clause ORDER BY, mais je n'en ai manifestement pas. = P

+0

n/m. Je viens de réaliser la folie dans ce que j'essayais de faire. – rageingnonsense

Répondre

1

Une insertion ne peut pas avoir une clause where. Peut-être que vous vouliez réellement update?

+1

Une insertion peut avoir une clause WHERE si vous utilisez un SELECT pour remplir les valeurs. Voir ma réponse pour plus de détails. –

+1

@OMG - Mentalement alors (pour moi) le 'where' est sur le sous-select. Mais oui. – Donnie

4

Vous ne définir une clause WHERE si vous peuplez le INSERT statement avec un SELECT. IE:

INSERT INTO mydb.inventory 
    (itemID) 
SELECT :itemID FROM DUAL 

Sinon, vous spécifiez les valeurs-est:

INSERT INTO mydb.inventory 
    (itemID) 
VALUES 
    (:itemID) 

Vous spécifiez une clause WHERE lorsque vous êtes updating an existing record:

UPDATE mydb.inventory 
    SET itemid = :itemid 
WHERE playerid = :ID 
1

Une clause where est plutôt inhabituel dans une instruction insert. Peut-être que vous essayez de mettre à jour à la place?

UPDATE mydb.inventory SET itemID = :itemID WHERE playerID = :ID; 
+2

"inhabituel" est une description quelque peu discrète de quelque chose qui est simplement syntaxiquement faux. –

Questions connexes