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 :

Comment une proc stock oracle peut retournée un tableau


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut Comment une proc stock oracle peut retournée un tableau
    Salut a tous

    j'essaie de savoir comment une procédure stocker peut retouner un tableau de decimal qui est créer et remplie lors de son exécution...

    D'après ce que j'ai pu lire sur le net, il faudrait que je définisse dans ma procédure un type de tableau spécifique qui pe être retourné...

    Si qqun à des idées n'hesitez pas...
    merci à tous bye

  2. #2
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut précision
    le type en question est celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE tbl_C IS TABLE OF rec_C INDEX BY BINARY_INTEGER;
    rec_C etant declarer comme ceci :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    TYPE rec_C IS RECORD
    	(
          nisejour       PENSOINS.ACTIVITE.NISEJOUR%TYPE,
          nipresc        PENSOINS.ACTIVITE.NIPRESC%TYPE,
          qttdem         PENSOINS.ACTIVITE.QUANTITE%TYPE,
    	  niuf_heb       NUMBER,
    	  idpatient      PENSOINS.SEJOUR.NIPATIENT%TYPE,
    	  nom_pat        PENSOINS.PATIENT.NOM%TYPE,
    	  prn_pat        PENSOINS.PATIENT.PRENOM%TYPE,
    	  nip            PENSOINS.PATIENT.NIP%TYPE,
     
    	  lib_presc      PENSOINS.PRESC.LIBELLE%TYPE,
    	  nimed          PENSOINS.PRESC.NI%TYPE,
    	  frzjour        PENSOINS.PRESC.FRZJOUR%TYPE,
    	  frzheure       PENSOINS.PRESC.FRZHEURE%TYPE,
    	  type_presc     PENSOINS.PRESC.TYPE%TYPE,
    	  quantite       PENSOINS.PRESC.QUANTITE%TYPE,
    	  commentair     PENSOINS.PRESC.COMMENTAIR%TYPE,
    	  lib_unitpresc  PENSOINS.C_UNITEPRESC.LIBELLE%TYPE,
    	  abg_unitpresc  PENSOINS.C_UNITEPRESC.ABREGE%TYPE,
    	  lib_voie       PENSOINS.C_VOIEADM.LIBELLE%TYPE,
    	  nbjour         PENSOINS.PRESC.NBJOUR%TYPE,
    	  urgence        PENSOINS.PRESC.URGENCE%TYPE,
    	  demande        PENSOINS.PRESC.DEMANDE%TYPE,
    	  stat           PENSOINS.AVS_PHR.STAT%TYPE,
    	  com            PENSOINS.AVS_PHR.COM%TYPE,
    	  coef_presc     PENSOINS.C_MEDUNIT.COEF%TYPE,
     
    	  coef_disp      PENSOINS.C_MEDUNIT.COEF%TYPE,
    	  codecip        PENSOINS.C_PRESENTATION.CODECIP%TYPE,
    	  coef           NUMBER,
    	  niprod         PHARM.PHR_PRODUIT.NIPRODUIT%TYPE,
    	  codeb          PHARM.PHR_PRODUIT.CODE%TYPE,
    	  distrib        PENSOINS.C_SPECIALITE.DISTRIB%TYPE,
    	  fraction       PENSOINS.C_SPECIALITE.FRACTION%TYPE,
     
          qttreste_disp  INTEGER,
          qttreste       INTEGER,
          qttrea         INTEGER,
          qttdem_disp    INTEGER,
          qttrea_disp    INTEGER,
          qttrea_trunc   INTEGER,
          qttrestera     INTEGER
    	);

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Soit tu crées ce type en entête d'un package soit tu crées un type basé (dans ce 2è cas il ne pourra pas être index by binary integer).

    [EDIT]Voici un exemple :
    http://www.developpez.net/forums/viewtopic.php?t=405264
    [/EDIT]
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut nouvelle erreur
    re

    j'ai fais ce que tu m'as dit j'ai declares les types dans l'entete du package ca compile nickel

    j'ai declaré dans ma procédure un champ de nature out et de type le type que je veux retourner , ca donne :
    et à la fin de ma procédure j'ai :
    qui sont de même type.

    lors de l'appel à ma proc j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RA-06553: PLS-306: wrong number or types of arguments in call to 'REQ_PRESC_MED'
    'REQ_PRESC_MED' etant la procédure ne question

    des idées du pko de ce message

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Quel est le type de la variable que tu mets en out dans l'appel de ta procédure ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut re
    en fait je fais un appel via Toad de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call pck_dxpharm_plus.req_presc_med(200510141400, 200509091400, 200510151400, 200510131417, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, 95)
    et la signature de ma procédure est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCEDURE   REQ_PRESC_MED 
    (p_datedeb     IN INTEGER,
                                 p_datelast    IN INTEGER,
                                 p_datenext    IN INTEGER,
                                 p_aujourd_hui IN INTEGER,
                                 p_typaff      IN VARCHAR2,
           	             p_niuf        IN INTEGER,
    	             p_niufGest    IN INTEGER,
    	             res            OUT tbl_C
    							 );
    qd je l'appelle je passe rien dans le champ out puisque que par définition il est OUT et pas IN

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tu ne peux pas mettre 95, ce n'est pas une variable.

    Si tu veux un résultat en sortie d'une procédure, dans l'appel il faut que tu mettes une variable du même type, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare
       res mon_package.tbl_C;
    begin
      pck_dxpharm_plus.req_presc_med(200510141400, 200509091400, 200510151400, 200510131417, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, res);
    end;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut rep
    je vois ce que tu veux dire mais le problème c'est que j'appelle cette fameuse procédure depuis une application asp.net et il faut que je récupère ce tableau dans mon code .NET pour le traiter et le problème c'est que la definition du type tblC est faisable dans mon package mais dans mon code VB.net c'est impossible , ce type est inconnu alors comment passé un paramètre de ce type depuis mon appli VB.net qui ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim p_resqttrestera As OracleParameter
            p_resqttrestera = New OracleParameter("p_resqttrestera", OracleType.Number)
            p_resqttrestera.Direction = ParameterDirection.ReturnValue
            myCommand.Parameters.Add(p_resqttrestera)
    Pour que ca marche il faudrait que OracleType possède un type tblC, tu veux ce que je veux dire ,comment faire ?

  9. #9
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Peut-être trouverez-vous votre bonheur dans cet article

    c'est en anglais, désolé...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut creer et remplir un fichier XML
    Merci pour les infos, mais l'exemple m'a montrer que ce n'était pas faisable avec ma proc et ma version d'oracle.
    Certaine expression comme REFCURSOR ou PIPELINED n'existe pas et les données de ma nested table tblC n'appartienne pas à la même table donc le %ROWTYPE ne fonctionnera pas...

    Par contre est-il possible de créer et remplir un fichier XML avec les valeurs de ce tableau puis de le retourner et de parser cote VB.NET
    Si oui comment je peux faire pour créer et remplir le fichier XML en PL/SQL et comment le recupérer coté dotNET ? quel type de retour je dois paramétrer qd j'appelerai cette procédure , quel type OracleType est compatible avec un fichier xml.

    Merci d'avance pour votre aide à tous ;-)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/09/2007, 15h29
  2. Réponses: 5
    Dernier message: 27/07/2007, 16h21
  3. Réponses: 3
    Dernier message: 23/01/2007, 09h20
  4. Réponses: 9
    Dernier message: 23/09/2006, 17h13
  5. [ORACLE]Paramètre d'une proc stock
    Par HexChit dans le forum SQL
    Réponses: 3
    Dernier message: 14/09/2006, 11h23

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