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

Forms Oracle Discussion :

utilisation forms_ddl + variable de subtitution


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut utilisation forms_ddl + variable de subtitution
    Bonjour
    J’ai un problème dans fomrs :

    Dans mon programme principal, j’ai utilisé la fonction afin de la tester :
    - forms_ddl ( requete_string)
    Ma requête est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    My_requete= ‘select count (*) into n from user_tables’ ;
    Forms_ddl ( my_requete);
    Mon problème est que je n’arrive pas a voir la valeur de: n. car quand je veux afficher la valeur de n je constate quelle n’est pas revoyée.

    Et pour cela je me suis dis j’utilise une variable de substitution. Et ma requête serrais comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    My_requete= ‘select count (*) into’ || to_char ( :n) || ‘from user_tables’ ;
    Forms_ddl ( my_requete);
    SVP dites moi est il possible d’utiliser une variable de substitution ? et c’est oui comment la déclarée dans forms.

    Merci pour votre aide

  2. #2
    Expert confirmé
    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
    Par défaut
    Forms_ddl ne renverra jamais rien, à part FORM_SUCCESS ou FORM_FAILURE.
    Vous devez utiliser le SQL dynamique coté BDD avec EXECUTE IMMEDIATE ou coté Forms avec EXEC_SQL.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    j'ai utilsé le packge exec_sql, et c'est la méme chose la requete s'execute mais il me revoit pas la valeur de n.

    vous m'avez parlé de la fonction execute immediate est ce que je peux l'utiliser dans mon programme forms.

    et pour la variable de subtitution est ce que je peux l'utiliser dans forms et comment je peux la déclarer

  4. #4
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par travail2009 Voir le message
    j'ai utilsé le packge exec_sql, et c'est la méme chose la requete s'execute mais il me revoit pas la valeur de n.
    On peut voir votre code ?

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    voila mon code sous forms

    programme principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Déclare
    Req varchar2 (255) ;
    v_db varchar2 (255) ;
    n number
    Begin
     
    V_db := ‘connect scott/scott@mabase’;
    Req :=  ‘select count (*) into n from user_table’;
    Exec (req,v_db);
    Message(to_char(n));
    End;

    Et le corps de la procédure exec est le suivant:

    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
    PROCEDURE exec (sql_string IN VARCHAR2, connection_string IN VARCHAR2 DEFAULT NULL, n out number )
    is
    connection_id EXEC_SQL.ConnType;
    cursor_number EXEC_SQL.CursType;
    ret PLS_INTEGER;
    m number;
    begin
    iF connection_string IS NULL THEN
    connection_id := EXEC_SQL.DEFAULT_CONNECTION;
    --message('open3='||connection_string);
    ELSE
    --message('open1='||connection_string);
    connection_id :=EXEC_SQL.OPEN_CONNECTION(connection_string);
    --message('open2='||connection_string);
    END IF;
    cursor_number :=EXEC_SQL.OPEN_CURSOR(connection_id);
    EXEC_SQL.PARSE(connection_id, cursor_number, sql_string);
    --message('sql='||sql_string);
    ret := EXEC_SQL.EXECUTE(connection_id, cursor_number);
    EXEC_SQL.CLOSE_CURSOR(connection_id, cursor_number);
    EXEC_SQL.CLOSE_CONNECTION(connection_id);
    -- commit;
    --message('hi');
    EXCEPTION WHEN EXEC_SQL.PACKAGE_ERROR THEN 
    TEXT_IO.PUT_LINE('ERROR (' ||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(connection_id)) || '): '||EXEC_SQL.LAST_ERROR_MESG(connection_id)); 
     
    IF EXEC_SQL.IS_CONNECTED(connection_id) THEN 
    IF EXEC_SQL.IS_OPEN(connection_id,Cursor_number) THEN 
    EXEC_SQL.CLOSE_CURSOR(connection_id,cursor_number); 
    END IF;
    EXEC_SQL.CLOSE_CONNECTION(connection_id); 
    END IF; 
     
    WHEN OTHERS THEN 
    DISPLAY_ERROR;
     
    END;

  6. #6
    Expert confirmé
    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
    Par défaut
    Voici le code correct: notez bien que votre procédure est transformée en fonction
    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
    FUNCTION exec (sql_string IN VARCHAR2)
    return Varchar2
    Is
      cursor_number EXEC_SQL.CursType;
      ret PLS_INTEGER;
      m number := 0;
    Begin
     
     cursor_number :=Exec_SQL.Open_cursor; 
     
     EXEC_SQL.PARSE(cursor_number, sql_string);
     EXEC_SQL.DEFINE_COLUMN(cursor_number,1,m); 
     ret := EXEC_SQL.EXECUTE(cursor_number);
     
     If EXEC_SQL.FETCH_ROWS(cursor_number) > 0 Then
          EXEC_SQL.COLUMN_VALUE(cursor_number,1,m); 
     End if ;      
     
     Return to_char(m);
     
    EXCEPTION 
      When EXEC_SQL.INVALID_CONNECTION Then
         Return 'Unexpected Invalid Connection error from EXEC_SQL'; 
     
      When EXEC_SQL.PACKAGE_ERROR Then
        return 'Unexpected error from EXEC_SQL: '||to_char(EXEC_SQL.LAST_ERROR_CODE)|| EXEC_SQL.LAST_ERROR_MESG; 
     
      When Others Then
        return SQLERRM; 
     
    END;
    Ainsi que l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Declare
      Req varchar2 (255) ;
      res varchar2 (4000) ;
    Begin
      Req := 'select count (*) from emp';
      res := Exec (req);
      Message('res:' || res, no_acknowledge);
    End;

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    merci pour votre aide et le code que vous m'avez donné je vais le tester.

Discussions similaires

  1. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 17h25
  2. Réponses: 4
    Dernier message: 11/07/2005, 11h03
  3. Réponses: 7
    Dernier message: 07/09/2004, 14h16
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58
  5. Utiliser des variables d'environnements
    Par Xam335 dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/08/2004, 14h15

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