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

Oracle Discussion :

[Oracle 9] Problème SQL dynamique


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut [Oracle 9] Problème SQL dynamique
    Bonjour,

    pour récupérer un curseur en paramètre de sortie dans ma procédure stockée j'ai créé un code dynamique.

    Ma première version était la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE PROCEDURE PS_GET_DETAILS_LOCALISATION
    (NOM_TABLE IN VARCHAR2,
    ID_TABLE IN VARCHAR2,
    io_cursor IN OUT LP_LOCALISATION.C_ST_LOCALISATION )
    AS
    BEGIN
    OPEN io_cursor FOR
    SELECT ID, CODE, DESI FROM aii.VW_LOCALISATION_UP
    WHERE ID = TO_NUMBER(ID_TABLE);
    END;
    /
    Show errors
    Avec le test suivant pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SET SERVEROUTPUT ON;  
    DECLARE  
            CUR LP_LOCALISATION.C_ST_LOCALISATION;  
            rec VW_LOCALISATION_UP%ROWTYPE ;  
    BEGIN  
            PS_GET_DETAILS_LOCALISATION('UP','174',CUR);  
            LOOP  
                    FETCH CUR INTO rec ;  
                    EXIT 
            WHEN CUR%NOTFOUND ;  
                    dbms_output.put_line( rec.ID || ' ' ||rec.CODE ) ;  
            END LOOP ;  
            CLOSE CUR ;  
    END;
    Maintenant si je créé mon curseur dynamiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    CREATE OR REPLACE PROCEDURE PS_GET_DETAILS_LOCALISATION
    (NOM_TABLE IN VARCHAR2,
    ID_TABLE IN VARCHAR2,
    io_cursor IN OUT LP_LOCALISATION.C_ST_LOCALISATION )
    AS
     
    vlStr	VARCHAR2(500) ;
    BEGIN
     
    vlStr := ' OPEN io_cursor FOR ' ;
    vlStr := vlStr || ' SELECT ID, CODE, DESI ' ;
    vlStr := vlStr || ' FROM aii.VW_LOCALISATION_' || NOM_TABLE ;
    vlStr := vlStr || ' WHERE ID = TO_NUMBER(' || ID_TABLE || ')' ;
     
    DBMS_UTILITY.EXEC_DDL_STATEMENT(vlStr);
    END;
    /
    Show errors
    La procédure compile mais mon test ne passe plus et ressort avec l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE
    *
    ERREUR à la ligne 1 :
    ORA-00900: Instruction SQL non valide
    ORA-06512: à "SYS.DBMS_SYS_SQL", ligne 826
    ORA-06512: à "SYS.DBMS_SQL", ligne 32
    ORA-06512: à "SYS.DBMS_UTILITY", ligne 550
    ORA-06512: à "AII.PS_GET_DETAILS_LOCALISATION", ligne 15
    ORA-06512: à ligne 5
    Merci par avance de votre aide.

  2. #2
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Bonjour,

    Ca peut être un problème de privilège :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant select on aii.VW_LOCALISATION_UP to utilisateur
    utilisateur : c'est le nom de ton utilisateur qui execute la procedure

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Bonjour,
    ben j'ai bien peur que non puisque je suis connectée en tant qu'admistrateur de la base, en tant que AII justement.

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Etes-vous sûr que DBMS_UTILITY.EXEC_DDL_STATEMENT soit la bonne fonction pour ouvrir un curseur
    pour moi, DDL a toujours voulu dire Data Description Language...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Ben justement non je ne suis pas sûre que ce soit la bonne méthode.
    Si j'essaie avec execute immediate il me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
    *
    ERREUR à la ligne 1 :
    ORA-00900: Instruction SQL non valide
    ORA-06512: à "AII.PS_GET_DETAILS_LOCALISATION", ligne 15
    ORA-06512: à ligne 5

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Essayez plutôt cette syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
      cur SYS_REFCURSOR ;
      req VARCHAR2(2000) ;
      var EMP%ROWTYPE ;
    BEGIN  
      req := 'select * from emp' ;
      OPEN cur FOR req ;
      LOOP
        FETCH cur INTO var ;
    	EXIT WHEN cur%NOTFOUND ;
    	dbms_output.put_line( 'ename = ' || var.ENAME ) ;
      END LOOP ;
      CLOSE cur ;
    END;

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

Discussions similaires

  1. Problème SQL dynamique
    Par samoussa dans le forum PL/SQL
    Réponses: 2
    Dernier message: 15/05/2009, 14h04
  2. Oracle 8 : Problème SQL
    Par davy.g dans le forum Oracle
    Réponses: 2
    Dernier message: 26/07/2007, 16h36
  3. [Oracle 9i] Bind variables et sql dynamique
    Par jld_33 dans le forum Oracle
    Réponses: 17
    Dernier message: 09/06/2006, 11h49
  4. Réponses: 3
    Dernier message: 23/05/2006, 15h09
  5. Réponses: 4
    Dernier message: 30/01/2005, 14h23

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