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 :

Résultat de prostoc dans Sql


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut Résultat de prostoc dans Sql
    Bonjour,

    J'aimerais utiliser le résultat d'une prostoc dans le sql d'une autre. (sous 8i)

    Explication :

    J'ai une prostoc1 :

    PROCEDURE prostoc1 (param1 in varchar, ... outcur out outcur) is
    begin
    OPEN outcur FOR sql ici
    end prostoc1


    et une prostoc2 :

    PROCEDURE prostoc2 (param1 in varchar, ... outcur out outcur) is
    begin
    OPEN outcur FOR select * from table where champ1 in (resultat prostoc1)
    end prostoc2


    sachant que
    - Le sql des la prostoc1 est suffisamment complexe (250 lg) pour qu'une copie du sql soit exclue.
    - la prostoc1 est déjà utilisée indépendamment de la prostoc2. Ce qui est justifie sa présence.

    En vous remerciant d’avance …

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from table where champ1 in (cursor);
    est illégal.

    Tu pourrais crée procstoc1 comme une fonction qui retourne une table

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Salut tu peux faire un appel à ta proc1 pour recupérer ton out cursor, puis le parcourir et faire ton traitement. Un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PROCEDURE prostoc2 (param1 in varchar, ... outcur out outcur) is
      l_cur outcur;
      l_curType outcur%ROWTYPE;
    begin
    	 prostoc1 (param1, ... , l_cur);
     
    	 FOR l_cur IN l_curType
             LOOP    
                     --Traitement
    	  	 l_curType.monchamps;
    	 END LOOP;
     
    end prostoc2

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    laurentschneider :
    je vois ce que tu veux dire mais j'avoue que j'ai du mal à le faire concrètement.

    Ca donnerai un truc dans le style :
    Dans la Prostoc2
    declarer un record et une table de ce record
    exectuer prostoc1 et recupérer l_cur1 dans table (la je sais pas faire)
    (Après je sais utiliser la table dans le sql).

    Est-ce que qq1 a un exemple ?



    Delwyn :
    Je dois faire des traitements par lot sql de type
    select * from table1 t, l_cur1 c1, l_cur2 c2
    where t.id1 = c1.id
    and t.id2 = c2.id
    ou
    select * from table1 t
    where t.id1 in (select c.id from l_cur1)
    and t.id2 in (select c.id from l_cur2)

    sachant que chaque sql est assez complexe (100 à 200 lg). C'est pour des reports. Je pense que le curseur n'est pas adapté pour ces cas et je risque de me faire des noeuds dans les boucles

    Si ca peut aider à comprendre, je reprend une appli qui fait tout avec des vues imbriqués (5 à 6 niveau entre plusieurs bases ). L'état actuel est du genre :
    View1 = sql
    view2 = sql
    view3 = select view1, view2
    mais ce system a des limites et en particulier qu'il n'y a pas de paramètres et qu'il faut que view3 me renvoie tous les champs de view1 et 2 pour faire des critères ou cumuls.


    Merci à tous ...

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    a titre d'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    create or replace type t is table of number;
    /
     
    create or replace function f return t pipelined is
    begin
      for f in (select deptno from emp) loop 
        pipe row (f.deptno);
      end loop;
    end f;
    /
     
    select * from dept where deptno in 
      (select column_value from table(f));

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    J'ai bien peur que pipelined ne fonctionne pas en 8i.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    hé oui, désolé...

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    > Le sql des la prostoc1 est suffisamment complexe (250 lg) pour qu'une copie du sql soit exclue.

    il ne faut peut-être donc pas l'exclure . . .

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    J'ai pas encore capitulé !

    J'ai les options global temporary table ou l'objet table.

Discussions similaires

  1. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  2. [MySQL] Comparer dans un if le résultat d'une requête sql
    Par ledu_alexandre dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/01/2007, 04h24
  3. Réponses: 10
    Dernier message: 04/01/2007, 14h32
  4. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07
  5. résultat d'une requete SQL dans un tableau en JSP
    Par Paradoxys dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/04/2005, 16h17

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