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

SQL Oracle Discussion :

[Oracle 9i] erreur ORA-01006 quand la variable


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 25
    Par défaut [Oracle 9i] erreur ORA-01006 quand la variable
    Bonjour,

    J'ai besoin d'un peu d'aide sur cette procédure dont le but est simplement de construire une requête update qui met à jour un champ NCLOB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (
    tabName                    IN      	VARCHAR2 DEFAULT NULL,
    fieldUpdateName            IN      	VARCHAR2 DEFAULT NULL,
    fieldValue                 IN      	nclob DEFAULT NULL,
    fieldIdName                IN      	VARCHAR2 DEFAULT NULL,
    fieldId                    IN      	int DEFAULT NULL
    )
    AS
    BEGIN  	
      EXECUTE IMMEDIATE 'UPDATE ' || tabName || ' SET ' || fieldUpdateName || '  = '':x'' WHERE ' || fieldIdName || ' = ' || fieldId USING fieldValue; 
    END;
    Lorsque j'appele ma procédure depuis SQL*Plus, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERREUR à la ligne 1 :
    ORA-01006: La variable bind n'existe pas
    ORA-06512: à "USERPORTAL.SP_GEN_FIELD_UPDATE", ligne 24
    ORA-06512: à ligne 1
    1- Je pense devoir utiliser une variable bind car EXECUTE IMMEDIATE de la pas les types Unicode (NVARCHAR et NCLOB) or fieldValue est obligatoirement NCLOB,
    Je n'ai trouvé que ce moyen pour éviter le problème de "type incorrect" dans le EXECUTE IMMEDIATE

    2- Je suis preneur pour tout autre moyen de mettre à jour ce champ NCLOB, mais j'aiemrai quand même comprendre pourquoi ça ne marche pas.

    3- pour info, j'appele cette procédure depuis une appli en C#

    Merci

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    A quoi ça sert les guillemets ici
    et pourquoi tu n'utilise aussi une variable de binding pour fieldId ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 25
    Par défaut
    ce ne sont pas des guillemets mais des doubles cotes pour quand la la requête finale, le contenu de x soit entouré d'un simple cote. Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET champNCLOB = 'ekjfhjkfjkfjk' WHERE champID=1;
    Je n'utilise pas de binding pour fieldID car la conversion implicite INT vers VARCHAR2 se fait bien toute seule.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par manhattan.project Voir le message
    ce ne sont pas des guillemets mais des doubles cotes pour quand la la requête finale, le contenu de x soit entouré d'un simple cote. Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET champNCLOB = 'ekjfhjkfjkfjk' WHERE champID=1;
    Je n'utilise pas de binding pour fieldID car la conversion implicite INT vers VARCHAR2 se fait bien toute seule.
    Tu sait, avec les variable de binding c'est pas pareil.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Update table set col = ':x' where ...
    Doit être reamplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Upadate table set col = :x where ...
    L'utilisation des variables de binding n'a rien à voir avec les conversions implicites (mauvaise habitute).
    Ta requête doit être quelque chose de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Update table set col = :x Where autre_col = :y

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 25
    Par défaut
    Oui effectivement, ma syntaxe est incorrecte, en mettant comme tu le suggères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE 'UPDATE ' || tabName || ' SET ' || fieldUpdateName || ' = :c WHERE ' || fieldIdName || ' = :e' USING fieldValue, fieldId;
    j'élimine mon problème.

    Il manquait aussi le COMMIT; à la fin.

    Merci

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

Discussions similaires

  1. Import d'un dump oracle 9i erreur : ORA-01658
    Par krest dans le forum Administration
    Réponses: 3
    Dernier message: 04/04/2007, 08h50
  2. [Oracle 9i]: erreur ORA-01925 (max enables roles)
    Par NPortmann dans le forum Oracle
    Réponses: 2
    Dernier message: 30/03/2007, 09h39
  3. [Oracle 10g] Erreur ORA-00600
    Par Pakkaï dans le forum Oracle
    Réponses: 6
    Dernier message: 21/09/2006, 15h01
  4. [Oracle][débutant] Erreur ORA-12505
    Par mavina dans le forum JDBC
    Réponses: 1
    Dernier message: 31/07/2006, 14h46
  5. [Forms10g/oracle 9i] erreur ORA-01652
    Par marcalexis dans le forum Oracle
    Réponses: 6
    Dernier message: 14/02/2006, 18h30

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