IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ADO.NET Discussion :

Oracle.DataAccess.Client procédure stockée ORA-01403


Sujet :

ADO.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut Oracle.DataAccess.Client procédure stockée ORA-01403
    Bonsoir,

    Microsoft ayant annoncé que System.Data.OracleClient ne serait plus maintenu dans les futures versions du FrameWork, j'ai essayé de remplacer ce pilote par Oracle.DataAccess.Client après avoir installé ODT.

    L'appel à une procédure stockée provoque l'erreur suivante :

    ORA-01403: aucune donnée trouvée
    ORA-06512: à "SCHEMA.MA_FONCTION", ligne 15
    ORA-06512: à ligne 1
    Oracle Data Provider for .NET
    à Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
    à Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
    à Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
    Or la même procédure stockée dans la même application fonctionnait parfaitement avec OracleClient!
    Quelqu'un a-t-il une idée ?

    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Oui, enfin il y a deux problèmes (le deuxième étant révélé par le premier ) :

    - le premier est très certainement un problème de paramètres. Par défaut, le provider Oracle traite les paramètres par rang et non par nom; pour remettre le comportement du provider Microsoft (traitement par le nom), penser à mettre dans les commandes Oracle la propriété BindByName à true.

    J'ai déjà eu ce problème : http://www.developpez.net/forums/d10...pel-proc-stoc/


    - l'erreur que tu obtiens revèle aussi l'absence de traitement de l'exception "no data found" dans la programmation de ta proc stoc. En PL/SQL, un SELECT ... INTO .. lève une exception si aucune donnée n'est trouvée.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut [Résolu]Oracle.DataAccess.Client procédure stockée ORA-01403
    Bonjour,
    Bingo ! That's it
    C'est d'autant plus surprenant que le passage de paramètres par noms est plutôt une habitude Oracle que Microsoft me semble-t-il.
    Qui plus est je n'ai pas vu cette propriété mentionnée dans les exemples donnés par Oracle.
    Evidemment le no_data_found n'était que la conséquence de l'inversion probable des paramètres, j'aurai dû y penser plus tôt !

    Enfin merci pour votre réponse et passez de bonnes fêtes !

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Parfait. Ne pas oublier le bouton

    Citation Envoyé par clem_alain Voir le message
    C'est d'autant plus surprenant que le passage de paramètres par noms est plutôt une habitude Oracle que Microsoft me semble-t-il.
    Autant que je m'en souvienne, ADO.NET depuis sa première version a toujours eu les binding by name par défaut.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Autant que je m'en souvienne, ADO.NET depuis sa première version a toujours eu les binding by name par défaut.
    Il me semble aussi, du moins pour les SGBD qui le supportent...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Parfait. Ne pas oublier le bouton



    Autant que je m'en souvienne, ADO.NET depuis sa première version a toujours eu les binding by name par défaut.
    Oui, c'est bien ce que je disais avec les pilotes Microsoft que ce soit OracleClient ou MSDAORA.1 j'ai toujours passé mes paramètres par noms !
    Le plus bizarre c'est qu'Oracle est plus coutumier du fait, par exemple dans SqlDeveloper la génération d'un bloc anonyme pour appeler une procédure stockée utilise systématiquement l'appel par noms !
    Bôf, "Ces mystères nous dépassent, feignons d'en être l'instigateur !"

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Cette "subtilité" (pour être poli) du provider Oracle est d'ailleurs particulièrement énervante quand on veut utiliser la couche d'abstraction d'ADO.NET (DbProviderFactory & co), parce qu'on est obligé de faire un truc spécifique pour Oracle... Dommage qu'il n'y ait pas un paramètre global genre BindByNameByDefault

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Cette "subtilité" (pour être poli) du provider Oracle est d'ailleurs particulièrement énervante quand on veut utiliser la couche d'abstraction d'ADO.NET (DbProviderFactory & co), parce qu'on est obligé de faire un truc spécifique pour Oracle... Dommage qu'il n'y ait pas un paramètre global genre BindByNameByDefault
    D'une manière générale, il manque au sujet des paramètres quelque chose dans la couche d'abstraction : un "ParameterNameFactory", du fait que justement le nommage des paramètres n'est pas standard (par exemple @param ou SQL SERVER, :param pour Oracle, et je ne sais pas trop quoi pour les autres).

    Ceci permetrait d'écrire des requêtes en norme SQL standard quel que soit le type de SGBD.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    D'une manière générale, il manque au sujet des paramètres quelque chose dans la couche d'abstraction : un "ParameterNameFactory", du fait que justement le nommage des paramètres n'est pas standard (par exemple @param ou SQL SERVER, :param pour Oracle, et je ne sais pas trop quoi pour les autres).

    Ceci permetrait d'écrire des requêtes en norme SQL standard quel que soit le type de SGBD.
    Effectivement, je m'étais aussi fait cette réflexion plusieurs fois... Le plus simple à mon avis serait une surcharge de DbCommand.CreateParameter qui prend en paramètre le nom du paramètre.

    En fait, il y a déjà un moyen de récupérer des infos sur le format des noms de paramètres, mais c'est pas super pratique (et surtout ça permet pas directement de générer un nom)

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataTable dataSourceInfo = connection.GetSchema("DataSourceInformation");
    string parameterMarkerPattern = (string)dataSourceInfo.Rows[0]["ParameterMarkerPattern"];
    Ca renvoie une regex qui correspond au pattern pour les paramètres, par exemple pour SQLite :

    @[\p{Lo}\p{Lu}\p{Ll}\p{Lm}_@#][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}\uff3f_@#\$]*(?=\s+|$)
    Bref, c'est difficilement exploitable...

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    J'avoue n'avoir jamais approfondi le contenu de cette colonne ParameterMarkerPattern.

    Merci pour l'info.

    Elle est documentée où ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Elle est documentée où ?
    A ma connaissance, nulle part

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. iBatis/Oracle : problème exécution procédure stockée
    Par marinew dans le forum Accès aux données
    Réponses: 6
    Dernier message: 28/02/2011, 15h31
  2. [PEAR][MDB2] Oracle 9i et procédure stockée
    Par glutock dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 07/05/2009, 19h23
  3. [CR9 Oracle] Executer une procédure stockée depuis un rapport
    Par zodeno dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 26/03/2008, 14h39
  4. Réponses: 2
    Dernier message: 05/12/2005, 16h39
  5. Réponses: 12
    Dernier message: 27/08/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo