Suite

RuntimeError : erreur de SGBD sous-jacente ORA-00936 : l'expression manquante schema.tableName STATE_ID n'est pas une colonne dans la table ?

RuntimeError : erreur de SGBD sous-jacente ORA-00936 : l'expression manquante schema.tableName STATE_ID n'est pas une colonne dans la table ?


J'ai créé un curseur de recherche pour récupérer des données d'une classe d'entités.

L'exemple cassé ci-dessous est utilisé avec succès dans d'autres scripts que j'ai créés. La seule différence qui me vient à l'esprit est que je récupère les enregistrements d'une table de base de données, et non d'une classe d'entités, dans les cas de réussite.

Le code cassé renvoie une erreur sur la ligne,pour la ligne dans inCursor :. Le message est

RuntimeError : erreur SGBD sous-jacente [ORA-00936 : expression manquante ] [schema.tableName][STATE_ID = 718361]. 'STATE_ID' n'est pas une colonne dans ma table.

Je préfère envoyer explicitement une liste de champs au curseur car il y a plus de 50 colonnes dans ce tableau.

L'exemple de travail ci-dessous est le résultat d'un post que j'ai trouvé. Je l'ai essayé pour m'assurer que ma connexion à la base de données était bonne. Le code imprime les données de ligne comme prévu.

Quel est le problème avec l'exemple de code cassé ? Avez-vous une idée de la raison pour laquelle cela fonctionne avec des tables de base de données mais pas avec des classes d'entités ? Quelle est la meilleure façon d'écrire un curseur ? Je ne suis pas opposé à revenir en arrière pour retravailler du code en utilisant le curseur maintenant cassé.

Ce code fonctionne :

field = [f.name for f in arcpy.ListFields(inFC)] # get field list features = list(cursor_to_dicts(arcpy.SearchCursor(inFC), fields)) pour feature in features : print(feature)

Ce code NE FONCTIONNE PAS :

inputFields = [ "Field1", "Field2", "Field3", "Field4", "Field5", "Field6" ] avec arcpy.da.SearchCursor(inFC, inputFields) comme inCursor : pour la ligne dans inCursor : # faire des trucs

Mise à jour #1

La classe d'entités se trouve dans une géodatabase d'entreprise (Oracle). Nous utilisons peut-être le versioning, mais je ne peux pas confirmer pour le moment.


Le message d'erreur indique :

STATE_IDn'est pas une colonne dans ma table

Essayez donc cet extrait de code pour montrer s'il existe ou non :

importer arcpy inFc =  field = arcpy.ListFields(inFC) pour le champ dans les champs : print field.name

Vous semblez utiliser la gestion des versions de géodatabase, donc ce qui précède peut ou non révéler quoi que ce soit. Je pense que vous devriez modifier plus de détails dans votre question sur l'emplacement de stockage de cette classe d'entités.

Pour savoir d'où vient cette colonne STATE_ID, je vous recommande de consulter l'aide en ligne pour les tables système d'une géodatabase stockée dans Oracle car il s'agit de :

L'identifiant de l'état de la base de données vers lequel pointe cette version


La plupart des colonnes répertoriées dansChamps d'entréen'existait pas réellement dans la table de la base de données. La documentation dit qu'ils devraient exister mais ce n'est pas le cas.STATE_IDne faisait pas partie des colonnes manquantes et je ne sais toujours pas de quoi il s'agissait. Maintenant que j'ai mis à jour les noms de colonnes dansChamps d'entrée, tout va bien.


Voir la vidéo: SQL Server - Erreur 26 - Impossible de se connecter au serveur SQL server management studio