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

PL/SQL Oracle Discussion :

Fonction PL/SQL sans connaître la table


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Août 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 78
    Par défaut Fonction PL/SQL sans connaître la table
    Bonjour à tout le monde ,


    Svp si vous pouvez me dire : Est ce que c'est possible de créer une fonction PL SQL qui prend en IN une requête select dynamique ( sous type String ) et elle me retourne résultat ..Sachant que je ne connais ni la table ni le nombre de ses colonnes ..


    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 : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Si tu ne connais pas le nombre de colonnes, tu ne peux pas donner un type de retour à ta fonction de toute manière.

    Pour les autre cas, tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute immediat "requete" bulk collect into t_resultat
    avec t_resultat de type table of [ton retour]

  3. #3
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Salut,

    Tu cherches à exécuter une requête passée en paramètre si j'ai bien compris, tu peux essayer avec ce bout de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FUNCTION execute_query (queryString IN VARCHAR2 , messageErreur OUT VARCHAR2) RETURN NUMBER IS
     
    BEGIN
        EXECUTE IMMEDIATE queryString;
     
        RETURN 1;
     
        EXCEPTION WHEN OTHERS THEN
            messageErreur := SQLERRM;
            RETURN 0;    
    END execute_query;
    Qui te retourne 1 si la requête s'est bien exécutée, 0 sinon et tu peux récupérer le message d'erreur dans le paramètre messageErreur

  4. #4
    Membre actif
    Inscrit en
    Août 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 78
    Par défaut
    Une requête Select et récupérer son retour ..

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par ayoubkira Voir le message
    Une requête Select et récupérer son retour ..
    cf. réponse supra.

  6. #6
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Citation Envoyé par ayoubkira Voir le message
    Une requête Select et récupérer son retour ..

    Ok désolé, j'ai pas vu que c'était pour une instruction select...
    Je crois que Bluedeep a répondu à ta question du coup

  7. #7
    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
    Détaillez ce que vous cherchez avec un exemple.
    C'est possible via des ref cursors ou via des fonctions pipelined par exemple.

  8. #8
    Membre actif
    Inscrit en
    Août 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 78
    Par défaut
    Supposons que j'ai une requete Select * from uneTable ( sans connaitre les colonnes de cette table )

    je veux recuperer toutes les lignes et de plus je veux que chaque ligne sera affectée à une variable String de telle sorte les colonnes seront séparés par , .

    Par exemple :

    VariableString= col1 ,col2,col3,..

  9. #9
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,
    Si la requête t'es passée toute entière en paramètre, il te faut alors:
    . analyser la chaîne pour trouver la clause FROM et la table concernée,
    . regarder dans all_tab_columns - par exemple - pour lister les colonnes et générer la partie du "select" avec la concaténation que tu veux faire (
    col1 ,col2,col3,..
    )
    . retravailler si besoin le SQL qui t'était passé en paramètre afin de mettre a la place du "select" d'origine le tiens, celui avec la concaténation, tout en conservant le "from" et le "where" d'origine,
    . ensuite exécution dynamique, fetch cursor et renvoyer le tout sous forme de varchar2, ou "table of varchar2..."

    @+

Discussions similaires

  1. Trouver une valeur sans connaître la table
    Par Passepoil dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/07/2010, 15h47
  2. Réponses: 6
    Dernier message: 12/04/2010, 15h53
  3. [MySQL] problème de fonction SQL pour modification de table
    Par Purple Haze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/02/2007, 17h00
  4. Réponses: 2
    Dernier message: 04/09/2006, 18h07
  5. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03

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