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 :

Récupérer le nombre de colonne d'une requête


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récupérer le nombre de colonne d'une requête
    Bonjour,

    Je dois lancer des requêtes qui sont stockées dans le champs CD_SQL de la table(P_CTRL_FCTN) et insérer les résultats de celle-ci dans une autre table (P_SUIV_CTRL_FCTN_HDMD_DETAIL)

    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
    21
    22
    23
    24
    25
    26
    27
    28
     
     CREATE TABLE "PARAM"."P_CTRL_FCTN" 
       (	"ID_CTRL_FCTN" NUMBER(12,0) NOT NULL ENABLE, 
    	"CD_DOMA_FCTN" VARCHAR2(10 BYTE), 
    	"CD_PERIODE" VARCHAR2(4 BYTE), 
    	"LB_CTRL_FCTN" VARCHAR2(512 BYTE), 
    	"CD_SQL" VARCHAR2(4000 BYTE), 
    	"BC_EXEC" VARCHAR2(1 BYTE), 
    	"CD_TYPE_CTRL" VARCHAR2(1 BYTE), 
    	"LB_MODE_AFFICHAGE" VARCHAR2(10 BYTE), 
    	 CONSTRAINT "PK_P_CTRL_FCTN" PRIMARY KEY ("ID_CTRL_FCTN")
     
    CREATE TABLE "PARAM"."P_SUIV_CTRL_FCTN_HDMD_DETAIL" 
       (	"ID_CTRL_FCTN" NUMBER(12,0) NOT NULL ENABLE, 
    	"SSAA" NUMBER(4,0) NOT NULL ENABLE, 
    	"NU_SEMA" NUMBER(2,0) NOT NULL ENABLE, 
    	"DT_EXEC_CTRL" DATE, 
    	"CHAMP1" VARCHAR2(60 BYTE), 
    	"CHAMP2" VARCHAR2(60 BYTE), 
    	"CHAMP3" VARCHAR2(60 BYTE), 
    	"CHAMP4" VARCHAR2(60 BYTE), 
    	"CHAMP5" VARCHAR2(60 BYTE), 
    	"CHAMP6" VARCHAR2(60 BYTE), 
    	"CHAMP7" VARCHAR2(60 BYTE), 
    	"CHAMP8" VARCHAR2(60 BYTE), 
    	"CHAMP9" VARCHAR2(60 BYTE), 
    	"CHAMP10" VARCHAR2(60 BYTE)
       )
    Mon problème est que toutes les requêtes "CD_SQL" ne ramène pas le même nombre de champs, il faut donc que je rajoute le bon nombre de champs derrière les résultats de ma requête afin de pouvoir insérer dans ma table cible.

    J'ai d'abord voulu changer directement les requêtes à exécuter avec une procédure, afin qu'elle puisse être insérées. Mais cela n'est pas possible les requêtes dans le champs "CD_SQL" sont trop complexe (Union, minus, imbrication..)

    Il me reste donc 2 solutions à l'aide de requêtes dynamiques
    Soit rajouter 9 champs à mes résultats dans une requête imbriquée( comme ci dessous) puis limiter à 14 le nombre de colonne de la requête imbriquée, afin de pouvoir faire l'INSERT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL_STMT := 'INSERT INTO P_SUIV_CTRL_FCTN_HDMD_DETAIL select '||v_id_ctrl_fctn||', TO_NUMBER(TO_CHAR(SYSDATE-5,''IYYY'')), TO_NUMBER(TO_CHAR(SYSDATE-5,''IW'')),SYSDATE, temp.*,
                                  NULL as CHAMP1, NULL as CHAMP2, NULL as CHAMP3, NULL as CHAMP4, NULL as CHAMP5, NULL as CHAMP6, NULL as CHAMP7, NULL as CHAMP8
                                  from ('||v_cd_sql||')temp';
     dbms_output.put_line( ' \n requete : ' || SQL_STMT ) ;
                                  EXECUTE IMMEDIATE SQL_STMT;
                                  COMMIT;
    Soit récupérer le nombre de champs que renvoie la requête et ajouter le bon nombre de champs

    Le problème est que je ne vois ni comment récupérer le nombre de colonne ramené par une requête ni comment limiter à 14 champs un select qui ramène plus de champs.

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Cette discussion peut t'intéresser :
    http://www.developpez.net/forums/d12...alyse-syntaxe/

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Cette discussion peut t'intéresser :
    http://www.developpez.net/forums/d12...alyse-syntaxe/
    Merci pour le lien,
    j'ai essayé d'utiliser les packages dbms_sql mais, je n'ai toujours pas réussi à résoudre mon problème.

    Existe-t-il un moyen de récupérer le nombre de colonne du résultat d'une requête?

    Merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/03/2014, 14h19
  2. Réponses: 2
    Dernier message: 11/01/2010, 15h24
  3. Réponses: 0
    Dernier message: 11/01/2010, 11h31
  4. [OpenOffice][Base de données] Nombre de colonnes dans une requête
    Par clarion14 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 09/12/2009, 07h37
  5. Réponses: 2
    Dernier message: 20/11/2008, 18h09

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