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 :

[forms 6i] EXEC_SQL et erreur ORA-xxx


Sujet :

Forms Oracle

  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut [forms 6i] EXEC_SQL et erreur ORA-xxx
    Salut tout le monde,

    Je développe depuis quelques mois sous forms 6i et lorsque j'utilise le package EXEC_SQL pour exécuter une requête construite dynamiquement, j'obtiens souvent le message d'erreur suivant :
    FRM-40735 le déclencheur KEY-MENU a détecté une exception ORA-306500 non traitée.
    L'erreur ORA-306500 n'est pas répertoriée parmi les erreurs oracle et, de plus, si je récupère la requête et que je l'exécute sous SQLPlus, j'obtiens bien souvent un message d'erreur plus explicite.
    Ex :
    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
    8i CYRIL> SELECT   B2821.T37_CODE, TA_LIB, SPEC_MIN, SPEC_CIBLE, SPEC_MAX
      2  FROM     B2820, B2821, B0300 B0337 
      3  WHERE    B2820.SPEC_CODE  = B2821.SPEC_CODE 
      4  AND      B2821.T37_CODE  = TA_CODE 
      5  AND      TA_TABLE     = '37'
      6  AND      TA_ACTI      = '0'
      7  AND      B0337.T37_CODE  = TA_CODE 
      8  AND      ST_CODE      = '50008906600010NE001'
      9  AND     CL_CODE      = 'DUPONT'
     10  ORDER BY  T37_ORDRE
     11  /
    ORDER BY  T37_ORDRE
              *
    ERROR à la ligne 10 :
    ORA-00904: invalid column name
    Une fois que j'ai récupéré ce message d'erreur plus explicite, je peux corriger mon erreur rapidement.

    Par conséquent, je souhaiterais donc être capable de récupérer l'erreur Oracle la plus explicite avec EXEC_SQL (en l'occurence ORA-00904).
    Comment faire ?

    Merci d'avance.

  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
    Essayez d'ajouter cette section Exception:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    EXCEPTION
    WHEN EXEC_SQL.Package_Error THEN
    MESSAGE('Code: ' || EXEC_SQL.Last_Error_Code || ' Msg: ' || 
                                 EXEC_SQL.Last_Error_Mesg || ' Position: ' || 
                                 EXEC_SQL.Last_Error_Position );
    END;

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Parfait.

    Voici le code pour les éventuels utilisateurs qui passeraient par là :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    PROCEDURE CHARGER_SPEC_RECETTES IS
     LConn_conn_id     EXEC_SQL.CONNTYPE;
     LCu_spec       EXEC_SQL.CURSTYPE;
     LC_sql_stmt      VARCHAR2(500);
     LI_nIgn        PLS_INTEGER;
     LC_t37_code  B2821.T37_CODE%TYPE;
     LC_ta_lib   B0300.TA_LIB%TYPE;
     LC_spec_min  B2821.SPEC_MIN%TYPE;
     LC_spec_cible B2821.SPEC_CIBLE%TYPE;
     LC_spec_max  B2821.SPEC_MAX%TYPE;
    BEGIN
     -- il faut effacer le contenu du bloc avant de le recharger
     CLEAR_BLOCK;
      IF :B2.TRA_ST_LEX IS NOT NULL THEN
      BEGIN
       LConn_conn_id := EXEC_SQL.DEFAULT_CONNECTION;
       LCu_spec    := EXEC_SQL.OPEN_CURSOR(LConn_conn_id);
       LC_sql_stmt  := ' SELECT   B2821.T37_CODE, ' ||
                '       TA_LIB, ' ||
                '       SPEC_MIN, ' ||
                '       SPEC_CIBLE, ' ||
                '       SPEC_MAX ' ||
                 ' FROM     B2820, ' ||
                '        B2821, ' ||
                '        B0300, ' ||
                '        B0337 ' ||
                ' WHERE    B2820.SPEC_CODE  = B2821.SPEC_CODE ' ||
                ' AND      B2821.T37_CODE  = TA_CODE ' ||
                ' AND      TA_TABLE     = ''37'' ' ||
                ' AND      TA_ACTI      = ''0'' ' ||
                ' AND      B0337.T37_CODE  = TA_CODE ' ||
                ' AND      ST_CODE      = ''' || :B2.TRA_ST_LEX || ''' ';
       IF :B2.TRA_LEX_CL_CODE IS NOT NULL THEN
        LC_sql_stmt := LC_sql_stmt ||
                ' AND       CL_CODE      = ''' || :B2.TRA_LEX_CL_CODE || ''' ';
       ELSE
        LC_sql_stmt := LC_sql_stmt ||
                ' AND       CL_CODE IS NULL ';
       END IF;
       LC_sql_stmt  := LC_sql_stmt ||
                ' ORDER BY  T37_ORDRE';
     
       EXEC_SQL.PARSE(LConn_conn_id, LCu_spec, LC_sql_stmt);
       EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_spec, 1, LC_t37_code,  5);
       EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_spec, 2, LC_ta_lib,   30);
       EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_spec, 3, LC_spec_min);
       EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_spec, 4, LC_spec_cible);
       EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_spec, 5, LC_spec_max);
     
       LI_nIgn := EXEC_SQL.EXECUTE(LConn_conn_id, LCu_spec);
       FIRST_RECORD;
       WHILE ( EXEC_SQL.FETCH_ROWS(LConn_conn_id, LCu_spec) > 0 ) LOOP
        CREATE_RECORD;
     
        EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_spec, 1, :B4.T37_CODE);
        EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_spec, 2, :B4.TA_LIB);
        EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_spec, 3, :B4.SPEC_MIN);
        EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_spec, 4, :B4.SPEC_CIBLE);
        EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_spec, 5, :B4.SPEC_MAX);
     
        DESACTIVER_ITEM('B4.TA_LIB');
        DESACTIVER_ITEM('B4.SPEC_MIN');
        DESACTIVER_ITEM('B4.SPEC_CIBLE');
        DESACTIVER_ITEM('B4.TRA_VAL_SIM');
        DESACTIVER_ITEM('B4.SPEC_MAX');
       END LOOP;
     
       EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_spec);
       EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
      EXCEPTION WHEN EXEC_SQL.PACKAGE_ERROR THEN
       MSG_BOX('Code : ' || EXEC_SQL.LAST_ERROR_CODE || CHR(10) ||
           'Message : ' ||  EXEC_SQL.LAST_ERROR_MESG || CHR(10) ||
           'Position : ' || EXEC_SQL.LAST_ERROR_POSITION);
       EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_spec);
       EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
      END;
      END IF;
    END;
    Encore une dernière question : je n'ai pas lu tous vos articles mais il ne me semble pas avoir vu d'exemple de cette gestion d'exceptions ; ma mémoire me joue t'elle des tours ou aucun de vos articles n'en parle ?

  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
    Dans le Guide PL/SQL, je parle de la section Exception.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par SheikYerbouti
    Dans le Guide PL/SQL, je parle de la section Exception.
    Ok, merci pour tout.

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

Discussions similaires

  1. Erreur ORA-12154 de configuration de forms 10 g 10.2.0.1
    Par Bayoro dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 28/06/2008, 01h30
  2. FORMS et erreur ORA-XXXXX
    Par Nounoursonne dans le forum Forms
    Réponses: 2
    Dernier message: 06/10/2005, 21h01
  3. code retour UNIX sur erreur ORA
    Par vinz_07 dans le forum Administration
    Réponses: 7
    Dernier message: 25/08/2004, 11h04
  4. erreur ora-12801 : error signaled in parallel query server
    Par dngaya dans le forum Administration
    Réponses: 5
    Dernier message: 15/04/2004, 16h25
  5. erreur "ORA-22905" lors de l'execution d'un requet
    Par benji999 dans le forum Administration
    Réponses: 26
    Dernier message: 14/04/2004, 11h47

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