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 8.1.7] Requête dynamique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut [Oracle 8.1.7] Requête dynamique
    J'ai effectué plusieurs recherches ici et sur google, et il semblerait que la fonction "EXECUTE IMMEDIATE" ne soit pas gérée par cette version d'Oracle. Cette fonction semble remplacer le package DBMS_SQL des versions antérieures à la 9. Seulement je ne trouve pas l'équivalent à utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REQ_TABLE := 'SELECT ID FROM INSTANCE.'||NOM_TABLE;
    EXECUTE IMMEDIATE REQ_TABLE;
    Je cherche juste à exécuter un SELECT sur une table dont j'aurais récupéré le nom en amont dans un curseur, et je me fais jeter par mon serveur SQL.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Si, ça existe déjà en 8i. Ce serait quand même plus malin de nous donner l'erreur en question et lire l'article concernant le EXECUTE IMMEDIATE pour savoir comment récupérer le résultat

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Si, ça existe déjà en 8i. Ce serait quand même plus malin de nous donner l'erreur en question et lire l'article concernant le EXECUTE IMMEDIATE pour savoir comment récupérer le résultat
    J'ai lu la doc, après j'ai surement mal compris ce que j'ai lu mais j'ai au moins fait l'effort de la regarder.

    L'erreur en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> @curseur_tables;
            EXECUTE IMMEDIATE REQ_TABLE;
                    *
    ERROR at line 20:
    ORA-06550: line 20, column 10:
    PLS-00103: Encountered the symbol "IMMEDIATE" when expecting one of the
    following:
    := . ( @ % ;

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est trop demandé d'avoir le code complet ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    execute immediate, c'est du pl*sql pas du sql.
    Si tu veux le lancer par SQL*Plus, il te faut déjà faire ça dans un bloc pl/sql.

    Pour la suite voir : http://sheikyerbouti.developpez.com/execute_immediate/

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    Je sais bien que tu rends service à pas mal de monde sur le forum (je viens souvent ici pour lire sans poster) mais un poil d'aimabilité en plus ne serait pas pour me déplaire

    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
    20
    DECLARE
    	CURSOR LISTE_TABLE_CUR IS 
    	SELECT TABLE_NAME FROM SYS.DBA_TAB_COLUMNS Vw 
    		WHERE TABLE_NAME 
    		LIKE '_DATA' 
    		AND OWNER = 'INSTANCE' 
    		AND COLUMN_NAME = 'ID';
    	NOM_TABLE VARCHAR2(80);
    	REQ_TABLE VARCHAR2(512);
    BEGIN
    	OPEN LISTE_TABLE_CUR;
    	LOOP
    		FETCH LISTE_TABLE_CUR INTO NOM_TABLE;
    		EXIT WHEN LISTE_TABLE_CUR%NOTFOUND;
    		DBMS_OUTPUT.PUT_LINE(nom_table);
    	        REQ_TABLE := 'ID FROM INSTANCE.'||NOM_TABLE;
    		EXECUTE IMMEDIATE REQ_TABLE;	
    	END LOOP;
    	CLOSE LISTE_TABLE_CUR;
    END;

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par CrazyLiam Voir le message
    Je sais bien que tu rends service à pas mal de monde sur le forum (je viens souvent ici pour lire sans poster) mais un poil d'aimabilité en plus ne serait pas pour me déplaire
    Je veux bien être aimable mais un minimum d'effort dans la complétude des informations nous ferait gagner un temps précieux

    T'es bien sûr d'être en 8i ? Tu peux essayer en commentant EXECUTE IMMEDIATE STP ?

Discussions similaires

  1. [pb requête sql] Requête dynamique
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/09/2005, 12h31
  2. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  3. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50
  4. [Procs stockées] [Débutant] Requête dynamique
    Par stailer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2005, 14h29
  5. Requête dynamique en pagination
    Par pascal_fluck@hotmail.com dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/03/2005, 16h04

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