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 :

Utiliser une API pour remplir un groupe d'enregistrement


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut Utiliser une API pour remplir un groupe d'enregistrement
    Bonjour,
    SVP j'ai un probleme pour appeler une API au niveau du groupe d'enregistrements qui remplit une LOV.
    SI qlqun a une idée, je serai trés reconnaissant s'il me la partage....
    Merci bcp

  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
    quelle API ? auriez-vous l'amabilité de fournir plus de renseignements ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Je voulait dire par API dans ce cas, une procedure stockée qui retourne un type record avec lequel je veux remplir le groupe d'enregistrement de la liste de valeur. Avez vous une idée pour resoudre ce probleme?

  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
    Pourquoi une telle complexité ?

    Pourquoi ne pas utiliser CREATE_GROUP_FROM_QUERY() en lui passant en paramètre un ordre Select constitué dynamiquement ?

    Quelle est la finalité de votre besoin ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Ok, je t'explique mon besoin... je te remercie pour ton interet et ton precieuse aide....
    J'ai une tache d'adopter une application à une nouvelle architecture : avant il y avait des requetes SQL qui portent directement sur des tables existante, mnt, ces tables n'existent plus et les données qu'on estime avoir a partir de ces tables on les exploitent à partir des API sur un autre systeme alors ces API nous apportent le resultat qu'on attendait.
    ex : select x,y from TABLE1 Where x=... et y=....;
    devient
    GET_INFO(x,y) ;
    --------
    Le probleme c'est que ca marche mais en exception pour les groupes d'enregistrements qui sont crées sur la base des ordres Select ... From ...
    sur des tables qui n'existent plus et donc je suis obligé d'utiliser des API qui retournet un record pour alimenter le groupe d'enregistrements.
    ----
    Le probleme c'est que j'arrive pas à définir les données du groupe à partir d'une API : procedure stoquée.
    A noter que ces procedures stoquées sont crées sur un autre systemes et ne nous ramenent que le resultats.

  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
    Ok.

    Quel type de données retourne la fonction GET_INFO(x,y) ?

    peut-on voir un exemple des données retournées par cette fonction ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Vous en voici un exemple de mon API qui retourne un record défini dans le paquage
    ---------------------------------------------------
    CREATE OR REPLACE PACKAGE PA_TECHFAM AS

    Type TechFam Is Record ( P_ID_TECHFAM NUMBER(12),
    P_CTECHFAM VARCHAR2(60),
    P_LIB_TECHFAM VARCHAR2(40));

    Type R_TECHFAM Is TABLE OF TECHFAM
    Index by Binary_integer;

    Procedure GET_TECHFAM (T_TECHFAM OUT PA_TECHFAM.R_TECHFAM,
    P_CODE_RETOUR OUT NUMBER);

    END PA_TECHFAM;

    CREATE OR REPLACE PACKAGE BODY PA_TECHFAM AS

    Procedure GET_TECHFAM (T_TECHFAM OUT PA_TECHFAM.R_TECHFAM,
    P_CODE_RETOUR OUT NUMBER) IS


    Cursor c_element IS select c.ncli, c.nom, c.prenom1
    from client c
    where rownum < 10;

    i NUMBER;

    BEGIN
    p_code_retour := 0;
    i := 1;
    --
    Open c_element;
    Loop
    Fetch c_element Into T_TECHFAM(i).p_id_techfam,
    T_TECHFAM(i).p_ctechfam,
    T_TECHFAM(i).p_lib_techfam;
    Exit when c_element%notfound;
    i := i + 1;
    --
    p_code_retour := 1;
    --
    End loop;
    Close c_element;
    End GET_TECHFAM;
    End PA_TECHFAM;

  8. #8
    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
    ...
    Cursor c_element IS select c.ncli, c.nom, c.prenom1
    from client c
    where rownum < 10;
    ...
    alors là, je ne comprends plus ! vous dites que les tables n'existent plus et pourtant votre package utilise un curseur sur la table client !???

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    oui, en fait ce paquage n'est pas defini sur mon systeme mais sur un autre systeme qui lui communique via ces API.
    Avez-vous une idée pour exploiter cette API pour remplir mon groupe d'enregistrements à partir du record qu'elle retourne?

  10. #10
    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
    Il doit y avoir un moyen (compliqué bien sur...). cependant gardez à l'esprit que vos LOV ne pourront pas être utilisées pour valider les items !!!

    La seule solution que j'entrevoie, est de générer un ordre select basé sur DUAL avec le résultat de vos enregistrements

    Declare
    LN$I NUMBER := 1 ;
    LC$req VARCHAR2(20000) := 'Select ' ;
    T_Rec PA_TECHFAM.R_TECHFAM
    Begin
    -- appel de votre fonction package avec le tableau T_Rec IN OUT --
    -- Retour de la fonction --
    For I IN T_Rec.first .. T_Rec.last Loop
    If LN$I > 1 Then
    LC$Req := LC$Req || ' UNION SELECT ' ;
    End if ;
    LC$Req := LC$Req || T_Rec(i).p_id_techfam || '"col1",' ;
    LC$Req := LC$Req || T_Rec(i).p_ctechfam || '"col2",' ;
    LC$Req := LC$Req || T_Rec(i).p_lib_techfam || "col3" ;
    LC$Req := LC$Req || ' From DUAL ' ;
    LN$I := LN$I + 1 ;
    End loop ;
    End ;
    si le select généré s'avère correct, il ne reste plus qu'à l'attribuer au record_group.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    oui je comprend. Mais il reste comment alimenter le group à partir de la variable qui contient la requete à executer

  12. #12
    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
    Declare
    rg_name VARCHAR2(40) := 'MON_RG';
    rg_id RecordGroup;
    errcode number;
    Begin


    -- construction de la requête --
    ...


    -- construction du record group --

    rg_id := Find_Group( rg_name );
    IF Not Id_Null(rg_id) THEN
    Delete_group( rg_id ) ;
    End if;

    rg_id := Create_Group_From_Query( rg_name, LC$Req ) ;

    errcode := Populate_Group( rg_id );

    -- association LOV <-> record group --
    Set_Lov_Property( 'Nom_de_la_lov', GROUP_NAME, rg_name ) ;

    End;

  13. #13
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Je vous remercie infiniment........
    Je vais implementer cette solution immediatement......
    Je vous signalerai le resultat......
    Tout est clair mnt, et grace à vous...
    Merci
    @+

  14. #14
    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
    Comme le dédoublonnage est inutile, remplacez UNION par UNION ALL.

    vous ferez l'économie d'un tri.

    Et pour pouvoir créer votre LOV vous devez d'abord créer un record group bidon qui contient l'ordre select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NULL "col1", NULL "col2", NULL "col3" FROM DUAL

  15. #15
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    ok, merci

  16. #16
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    SAlut
    J'ai un petit probleme avec mon programme, c'est qu'un message d'erreur apparait indiquant qu'il est impossible d'effacer le groupe... cad que le DELET_GROUP a echoué
    les causes possibles?

  17. #17
    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
    rg_id := Find_Group( rg_name );
    IF Not Id_Null(rg_id) THEN
    Delete_group( rg_id ) ;
    End if;
    If not Id_Null -> on ne supprime le record group que s'il existe.

    Avez vous recopié correctement mon exemple ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    et SVP on initialise rg_name en quoi?

  19. #19
    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
    Peu importe, c'est un record group dynamique. mettez ce que vous voulez. (peut-être éviter le nom d'un record group physiquement présent dans la forme)

  20. #20
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Mille Merci à vous....... ca marche à merveille....$*
    ET voilà, c'est fait grace à vous biensur....
    une reniere question : c'est est ce que vous connaissez une fonction qui elimine les caracteres speciaux sur SQL comme par ex : '

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [11g] Utilisation de curseur pour remplir une table
    Par yassiraz dans le forum PL/SQL
    Réponses: 5
    Dernier message: 26/04/2015, 04h52
  2. [Python 3.X] Utiliser contenu d'une bdd pour remplir une liste déroulante.
    Par djbryan94 dans le forum GUI
    Réponses: 2
    Dernier message: 04/03/2015, 08h03
  3. [RegEx] Sprintf / utilisation des espaces pour remplir une ligne
    Par exilquery dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2012, 17h46
  4. Réponses: 1
    Dernier message: 22/02/2012, 15h41
  5. Réponses: 2
    Dernier message: 10/02/2012, 15h22

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