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 :

[PL/SQL] Interrogation d'un tableau par JAVA


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut [PL/SQL] Interrogation d'un tableau par JAVA
    Bonjour,

    J'ai un package PL/SQL déclaré ainsi:

    Les Specs:

    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
     
    CREATE OR REPLACE PACKAGE PKG_ESSAIS AS
     
      Type R_ESSAIS_AFF IS Record (
                              AFFAIRE   VARCHAR2(10) ,
                              DOSSIER   VARCHAR2(12) ,
                              CLIENT VARCHAR2(10)
                                    ) ;
     
      Type C_ESSAIS_AFF IS REF CURSOR RETURN R_ESSAIS_AFF ;
     
      TYPE T_ESSAIS_AFF IS TABLE OF R_ESSAIS_AFF
        INDEX BY BINARY_INTEGER ;
     
      PROCEDURE ESSAIS_TEST(P_TAB_MENU OUT T_ESSAIS_AFF) ;
     
    END PKG_ESSAIS;
    /
    Le Body:

    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
    CREATE OR REPLACE PACKAGE BODY PKG_ESSAIS AS
     
      PROCEDURE ESSAIS_TEST(P_TAB_MENU OUT T_ESSAIS_AFF) IS
     
        Curseur_Interne  C_ESSAIS_AFF ;
        i               Number(7) ;
     
      BEGIN
     
        OPEN Curseur_Interne FOR
          SELECT AFFAIRE ,
                      DOSSIER ,
                      CLIENT
            FROM AFFAIRE 
      ORDER BY AFFAIRE ASC ;
     
    	i := 0;
     
        LOOP
          i := i + 1;
    	  FETCH Curseur_Interne INTO P_TAB_MENU(i) ;
          EXIT WHEN Curseur_Interne%NOTFOUND ;
        END LOOP ;
     
        CLOSE Curseur_Interne ;
     
      END ;
     
    END PKG_ESSAIS;
    /
    Voilà, mon problème... Je n'ai jamais réalisé cette opération mais j'aimerais pouvoir lire la table créée par cette procédure à partir de java.

    Pouvez vous m'indiquer la méthode, ou me donner un exemple de ce type?

    Je vous en remercie par avance.

  2. #2
    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
    Jetez un coup d'oeil à cet article:
    http://sheikyerbouti.developpez.com/...record_set.htm
    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

  3. #3
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    Ok, j'ai regardé, mais c'est la partie "2. Function that returns an INDEX BY table" qui m'intéresse, et il n'y a pas le code java correspondant.

    Donc, je suis encore bloqué, une autre piste svp.
    Merci pour votre aide

  4. #4
    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
    Les collections de type INDEX BY sont les plus restrictives car elles ne peuvent être employées qu'en PL/SQL.
    Pourquoi avez-vous précisément besoin de ce type de collection ?
    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

  5. #5
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    ben je ne sais pas...
    j'essaie de trouver un moyen facile de communiquer entre java et PL/SQL... et là en fait , ça m'ennuie un peu de modifier tout le code de la procédure qui est bien plus compliquée que l'exemple que j'ai donné... tu me proposes quoi?

  6. #6
    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
    Celle-ci http://sheikyerbouti.developpez.com/...ord_set.htm#p3

    la différence avec la table INDEX BY est quasi négligeable et l'interro est des plus facile !

    Faut juste penser à augmenter la taille de la collection avec l'instruction .EXTEND
    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

  7. #7
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    ok, je te remercie, je vais essayer d'adapter le code.

  8. #8
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    Rebonjour,

    Je suis de retour avec mes problèmes de tableau...

    Alors j'ai vérifié avec les NESTED table, et cela ne me parait pas approprié à la situation...
    Ma proc ressemble plus à ceci...

    Spec:
    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
     
    CREATE OR REPLACE PACKAGE PKG_TEST AS
     
      Type R_TEST_AFF IS Record (
                              AFFAIRE   VARCHAR2(10) ,
                              DOSSIER   VARCHAR2(12) ,
                              CLIENT    VARCHAR2(10)
                                    ) ;
     
      TYPE T_TEST_AFF IS TABLE OF R_TEST_AFF
        INDEX BY BINARY_INTEGER ;
     
     
     
      Type R_TEST_CLI IS Record (
                              CLIENT   VARCHAR2(10) ,
                              ADRESSE  VARCHAR2(12) ,
                              VILLE    VARCHAR2(10)
                                    ) ;
     
      Type C_TEST_CLI IS REF CURSOR RETURN R_TEST_CLI ;
     
      TYPE T_TEST_CLI IS TABLE OF R_TEST_CLI
        INDEX BY BINARY_INTEGER ;
     
      PROCEDURE TEST(P_TAB_AFF OUT T_TEST_AFF
                    ,P_TAB_CLI OUT T_TEST_CLI) ;
     
    END PKG_TEST ;
    /
    Body:
    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
    CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
     
      PROCEDURE TEST(P_TAB_AFF OUT T_TEST_AFF
                    ,P_TAB_CLI OUT T_TEST_CLI) IS
     
       BEGIN
     
        P_TAB_AFF(1).AFFAIRE   := 'AFFAIRE1';
        P_TAB_AFF(1).DOSSIER  := 'DOSSIER1';
        P_TAB_AFF(1).CLIENT     := 'CLIENT1' ;
        P_TAB_CLI(1).CLIENT     := 'CLIENT1' ;
        P_TAB_CLI(1).ADRESSE  := 'ADRESSE1';
        P_TAB_CLI(1).VILLE        := 'VILLE1'  ;
     
        P_TAB_AFF(2).AFFAIRE := 'AFFAIRE2';
        P_TAB_AFF(2).DOSSIER := 'DOSSIER2';
        P_TAB_AFF(2).CLIENT  := 'CLIENT2' ;
        P_TAB_CLI(2).CLIENT  := 'CLIENT2' ;
        P_TAB_CLI(2).ADRESSE := 'ADRESSE2';
        P_TAB_CLI(2).VILLE   := 'VILLE2'  ;
     
        P_TAB_AFF(3).AFFAIRE := 'AFFAIRE3';
        P_TAB_AFF(3).DOSSIER := 'DOSSIER3';
        P_TAB_AFF(3).CLIENT  := 'CLIENT3' ;
        P_TAB_CLI(3).CLIENT  := 'CLIENT3' ;
        P_TAB_CLI(3).ADRESSE := 'ADRESSE3';
        P_TAB_CLI(3).VILLE   := 'VILLE3'  ;
     
      END ;
     
    END PKG_TEST ;
    /
    La proc n'est pas aussi simple bien sûr, mais elle me parait être un bon résumé.

    Voilà, il faut bien lire les tableaux, et pas des curseurs... et pouvoir les interroger en Java.

    J'ai du mal à imaginer que dans java, il n'y ai pas la possibilité d'interroger un tableau PL/SQL...

    Si vous avez des idées... je veux bien les entendre.
    Merci d'avance

  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
    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 régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    Bon, j'ai fait le choix de remplir une table NESTED avec ma table interne... C'est pas terrible, mais ça m'évite de revoir tout le code.
    J'ai à nouveau un soucis...

    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
     
    CREATE OR REPLACE PROCEDURE TEST_TITI(W_TAB_AFF OUT TABLE_TITI_AFFAIRE) IS
     
    P_TAB_AFF PKG_TEST.T_TEST_AFF;
    P_TAB_CLI PKG_TEST.T_TEST_CLI;
    Compteur NUMBER(5);
    w_sqlerr VARCHAR(255);
     
       BEGIN
     
        PKG_TEST.TEST(P_TAB_AFF,P_TAB_CLI) ;
     
    	Compteur := 0;
    	LOOP
    	   Compteur := Compteur + 1 ;
    	   EXIT When Compteur > 3;
    	   W_TAB_AFF.extend;
    	   W_TAB_AFF(Compteur) := REC_TITI_AFFAIRE(P_TAB_AFF(Compteur).AFFAIRE,P_TAB_AFF(Compteur).DOSSIER,P_TAB_AFF(Compteur).CLIENT);
     
    	END LOOP ;
    EXCEPTION
    WHEN OTHERS THEN
       w_sqlerr := sqlerrm;
    END ;
    Une exception est levée au moment de l'extend. il semblerait qu'il faille initialiser ma table objet. Comment on fait?
    Merci pour vos réponses.

  11. #11
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    J'ai trouvé...

    Il y a une super doc écrite par SheikYerbouti... Il faudrait que je regardes avant de poser mes questions !!

    désolé...

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Titouf
    J'ai trouvé...

    Il y a une super doc écrite par SheikYerbouti... Il faudrait que je regardes avant de poser mes questions !!

    désolé...
    En même temps, ce conseil vous est donné dans les règles du forum et puisqu'on en parle >> bouton en bas à gauche
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre régulier Avatar de Titouf
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 177
    Points : 95
    Points
    95
    Par défaut
    Ah oui !!
    Bon j'espère bien que c'est terminé cette affaire ...
    Merci à tous !!

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

Discussions similaires

  1. JDBC , tableau et java.sql.Array
    Par Nebulis dans le forum JDBC
    Réponses: 3
    Dernier message: 07/01/2010, 03h13
  2. [ezPDF] Tableau par requêtes sql
    Par frboyer dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/04/2009, 12h16
  3. Calendrier sous forme de tableau par requête SQL
    Par bouzinac dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/11/2008, 21h57
  4. [MySQL] Remplir un tableau par requêtes sql
    Par Melekitto dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/02/2006, 17h30
  5. [JDBC] [PL/SQL] Interroger un PL/SQL en java
    Par Titouf dans le forum JDBC
    Réponses: 5
    Dernier message: 10/02/2006, 11h03

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