ORA-01747: utilisateur non valide.table.colonne de la table.la colonne ou la spécification de la colonne
Obtenir l'erreur ci-dessus lorsque l'exécution immédiate est appelée dans une boucle
Update CustomersPriceGroups set 1AO00=:disc Where cuno=:cuno
Parameters: disc=66 cuno=000974
Update CustomersPriceGroups set 1AP00=:disc Where cuno=:cuno
Parameters: disc=70.5 cuno=000974
Update CustomersPriceGroups set 1AQ00=:disc Where cuno=:cuno
Parameters: disc=66 cuno=000974
Update CustomersPriceGroups set 1ZA00=:disc Where cuno=:cuno
Parameters: disc=60 cuno=000974
Qu'est-ce que cela signifie ?
Voici le fragment de code
c:=PriceWorx.frcPriceListCustomers('020','221');
LOOP
fetch c into comno,cuno,nama,cpls;
exit when c%notfound;
dbms_output.put_Line(cuno);
g:=priceWorx.frcPriceListItemGroups('020','221');
d:=priceworx.frcCustomerDiscounts('020','221',cuno);
loop
fetch g into comno,cpgs,n;
fetch d into comno,cpls,cuno,cpgs,stdt,tdat,qanp,disc,src;
--dbms_output.put(chr(9)||cpgs);
sQ:='Update saap.CustomersPriceGroups set "'|| trim(cpgs)||'"=:disc '
|| ' Where cuno=:cuno';
execute immediate sQ using disc,cuno;
commit;
dbms_output.put_line( sQ );
dbms_output.put_line( chr(9)||'Parameters: disc='|| disc||' cuno='||cuno);
exit when g%notfound;
end loop;
close g;
close d;
end loop;
OriginalL'auteur TonyP | 2012-02-27
Vous devez vous connecter pour publier un commentaire.
Identificateurs non cotées doivent commencer par un caractère alphabétique (voir règle 6 ici). Vous tentez d'affecter une valeur à une colonne avec un nom commençant par un nombre
1AO00
,1AP00
etc.Sans voir la définition de table pour
CustomersPriceGroups
nous ne savons pas si elle a des colonnes avec les noms. Si c'est le cas alors ils doivent avoir été créés comme des identificateurs entre guillemets. Si donc vous devrez vous référer à eux (partout) avec des guillemets, ce qui n'est pas idéal - rend le code un peu plus difficile à lire, il est facile de faire une erreur comme ça, et peut être difficile à repérer ce qui ne va pas. Même Oracle dire, sur la même page:Dans vous code vous semble à l'aide de guillemets lorsque vous affectez
sQ
, mais la sortie de vous montrer n'a pas; mais il n'a pas lasaap.
schéma identifiant. Cela peut être parce que vous n'êtes pas sous la version du code que vous pensez, mais pourrait avoir juste étéperdu si vous retapé les données au lieu de la coller - vous n'êtes pas montrer le plus tôt sortie de
c.cuno
. Mais il est également possible que vous ayez, par exemple, le cas de le nom de la colonne de mal.Si le
execute
est en train de jeter l'erreur, vous ne voyez pas la commande exécutée que de temps autour de la boucle parce que le débogage vient après c'est en voyant le succès de valeurs, et non pas celui qui est en train de briser. Vous devez vérifier toutes les valeurs renvoyées par les fonctions, je soupçonne queg
est de retourner une valeur pourcpgs
que ce n'est pas un nom de colonne valide.@Ninesided dit, en montrant plus d'informations, en particulier le plein de message d'exception, d'aider à identifier ce qui est mauvais.
OriginalL'auteur Alex Poole
vérifier votre requête pour la double virgule.
(il y a virgule supplémentaire après COLONNE2).
Mise à jour: il y a peu (certains ont des talents particuliers) - je réussir à obtenir les mêmes à l'exception de la nouvelle approche:
(deuxième série est redondant)
Merci. J'avais mis un supplément de virgule avant la première accolade de fermeture ). Oracle ne semble pas la peine de donner de bons messages d'erreur.
OriginalL'auteur yurin
Cela signifie que l'Oracle de l'analyseur pense que l'un de vos colonnes n'est pas valide. Ce pourrait être parce que vous avez incorrectement référence à une colonne, le nom de la colonne est réservée mot, ou parce que vous avez une erreur de syntaxe dans la
UPDATE
instruction qui rend Oracle pense que quelque chose qui n'est pas une colonne, une colonne. Il aiderait vraiment à voir le texte complet de la déclaration est en cours d'exécution, la définition de laCustomersPriceGroups
tableau et le texte intégral de l'exception soulevée, comme il le fera souvent dire qui colonne est en faute.,
dans uninsert
déclaration.Dans mon cas, le nom de colonne est réservée mot.
Génial la façon dont tous ces problèmes très différents de créer le même message d'erreur. C'est pas comme si l'analyseur ne sais pas ce qui s'est passé (si-check-direction de), les ingénieurs n'ont tout simplement la flemme de faire plus de messages d'erreur spécifiques.
Aussi, dans mon cas, le nom de la colonne est un mot réservé. Voici ce qu'il faut faire à ce sujet: stackoverflow.com/questions/11629966/...
OriginalL'auteur ninesided
Et j'ai été la rédaction de la requête comme. J'ai dû enlever
[
et]
Nous avons récemment déménagé à partir de SQL Server vers Oracle.
OriginalL'auteur Jaikrat
La cause peut aussi être quand vous groupe par un autre ensemble de colonnes que de sélectionner pour exemple:
OriginalL'auteur Rafał
Vous avez utilisé oracle mot-clé dans votre instruction SQL
OriginalL'auteur Alireza Alallah