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

Interfaces de programmation Oracle Discussion :

[Pro * C] Syntaxe de sys.dbms_system.ksdwrt


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut [Pro * C] Syntaxe de sys.dbms_system.ksdwrt
    Bonjour,
    j'ai un script .pc
    où j'aimerais logguer dans alert_log et trace log d'oracle les éventuels erreurs oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC sys.dbms_system.ksdwrt(3, to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL LSB n' || sqlca.sqlcode + ': ' || sqlca.sqlerrm.sqlerrmc);
    Je n'ai pas d'erreur quand je précompile ce script .pc qui me génère un fichier.c
    Mais lorsque je compile le .c
    j'obtiens:
    --------------------Configuration: host8 - Win32 Debug--------------------
    Compiling...
    HOST_oracle.c
    C:\Dveloppement\HOST_oracle.c(248) : error C2065: 'EXEC' : undeclared identifier
    C:\Dveloppement\HOST_oracle.c(248) : error C2146: syntax error : missing ';' before identifier 'sys'
    C:\Dveloppement\HOST_oracle.c(248) : error C2065: 'sys' : undeclared identifier
    C:\Dveloppement\HOST_oracle.c(248) : error C2224: left of '.dbms_system' must have struct/union type
    C:\Dveloppement\HOST_oracle.c(248) : warning C4013: 'to_char' undefined; assuming extern returning int
    C:\Dveloppement\HOST_oracle.c(248) : error C2065: 'sysdate' : undeclared identifier
    C:\Dveloppement\HOST_oracle.c(248) : error C2015: too many characters in constant
    C:\Dveloppement\HOST_oracle.c(248) : error C2015: too many characters in constant
    Quelle est la syntaxe en pro*c pour logguer des erreurs oracle?
    Merci pour votre aide.
    Cassy.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    personne pour m'aider?

    j'ai aussi regardé du côté d'utl_file.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sqlplus /nolog
    SQL> connect / as sysdba
    Connecté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> CREATE DIRECTORY ERROR_LOG AS '/home/app/oracle/admin/TST';
    Répertoire créé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> GRANT READ, WRITE ON DIRECTORY ERROR_LOG TO PUBLIC;
    Autorisation de privilèges (GRANT) acceptée.
    Voici ma procedure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE PROCEDURE ORACLE.utl_file_write (
      path       in varchar2,
      filename   in varchar2,
      text  in varchar2)
    is
        output_file  utl_file.file_type;
    begin
        output_file := utl_file.fopen (path,filename, 'W');
     
        utl_file.put_line (output_file, text);
        utl_file.fclose(output_file);
     
    end utl_file_write;
    Voici le code Pro*C:
    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
    #include "HOST_oracle.h"
    #include "sqlca.h"
     
    EXEC SQL BEGIN DECLARE SECTION;
      char SQLSTATE[6];
    EXEC SQL END DECLARE SECTION;
     
    //############################ SQLERR_blank
    // 
    // ----
    // Paramtre entre  : le contexte d'xcution.
    // ------
    // Valeur de retour  : Le code de l'erreur.
    // 
    long sqlerr_blank(void *contxt)
    {
    EXEC SQL BEGIN DECLARE SECTION;
      sql_context contx;
    EXEC SQL END DECLARE SECTION;
     
      contx = contxt;
     
      EXEC SQL CONTEXT USE :contx;
      EXEC SQL WHENEVER SQLERROR CONTINUE;
      // on log les erreurs oracle si le code erreur est ngatif
      //if (sqlca.sqlcode <0)
      //{
        //on insre un message dans alert log
        EXEC SQL EXECUTE
          BEGIN 
    	char text[] = to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || sqlca.sqlcode || ': ' || sqlca.sqlerrm.sqlerrmc;
    	utl_file_write ('/home/app/oracle/admin/TST','sql_error.log',:text);
          END;
        END-EXEC;
      //} 
      return sqlca.sqlcode;
    }
    Mais quand je précompile j'ai cette erreur:
    erreur smantique en ligne 32, colonne 66, fichier c:\dveloppement\host_oracle.pc:
    utl_file_write ('/home/app/oracle/admin/TST','sql
    _error.log',:text);
    .................................................................1
    PCC-S-02322, identificateur inconnu rencontr
    char text[] = to_char(sysdate, 'dd/mm/yyyy hh24:
    mi:ss') || ': Erreur SQL n' || sqlca.sqlcode || ': ' || sqlca.sqlerrm.sqlerrmc;
    .............1
    PLS-S-00103, Symbole "TEXT" rencontr la place d'un des symboles suivants :

    := . ( @ % ;

    erreur smantique en ligne 30, colonne 4, fichier c:\dveloppement\host_oracle.pc:
    BEGIN
    ...1
    PCC-S-02347, PL/SQL a trouv des erreurs syntaxiques
    J'ai donc changer le code ainsi:
    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
    #include "HOST_oracle.h"
    #include "sqlca.h"
     
    EXEC SQL BEGIN DECLARE SECTION;
      char SQLSTATE[6];
    EXEC SQL END DECLARE SECTION;
     
    //############################ SQLERR_blank
    // 
    // ----
    // Paramtre entre  : le contexte d'xcution.
    // ------
    // Valeur de retour  : Le code de l'erreur.
    // 
    long sqlerr_blank(void *contxt)
    {
    EXEC SQL BEGIN DECLARE SECTION;
      sql_context contx;
    EXEC SQL END DECLARE SECTION;
     
      contx = contxt;
     
      EXEC SQL CONTEXT USE :contx;
      EXEC SQL WHENEVER SQLERROR CONTINUE;
      // on log les erreurs oracle si le code erreur est ngatif
      //if (sqlca.sqlcode <0)
      //{
        //on insre un message dans alert log
        EXEC SQL EXECUTE
          BEGIN 
            utl_file_write ('/home/app/oracle/admin/TST','sql_error.log',to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || sqlca.sqlcode || ': ' || sqlca.sqlerrm.sqlerrmc);
          END;
        END-EXEC;
      //} 
      return sqlca.sqlcode;
    }
    Et quand je precompile j'ai cette erreur:
    Erreur la ligne 31, colonne 135 dans le fichier c:\dveloppement\host_oracle.pc
    utl_file_write ('/home/app/oracle/admin/TST','sql
    _error.log',to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || sql
    ca.sqlcode || ': ' || sqlca.sqlerrm.sqlerrmc);
    ................................................................................
    ......................................................1
    PLS-S-00201, identificateur 'SQLCA.SQLCODE' doit tre dclar
    Erreur la ligne 31, colonne 5 dans le fichier c:\dveloppement\host_oracle.pc
    utl_file_write ('/home/app/oracle/admin/TST','sql
    _error.log',to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || sql
    ca.sqlcode || ': ' || sqlca.sqlerrm.sqlerrmc);
    ....1
    PLS-S-00000, Statement ignored
    erreur smantique en ligne 30, colonne 4, fichier c:\dveloppement\host_oracle.pc:
    BEGIN
    ...1
    PCC-S-02346, PL/SQL a trouv des erreurs smantiques
    Aussi comment je pourrais utiliser ERROR_LOG au lieu de '/home/app/oracle/admin/TST' ?

Discussions similaires

  1. Erreur de syntaxe dans fichier *.pro
    Par Masmeta dans le forum Débuter
    Réponses: 8
    Dernier message: 08/01/2013, 20h50
  2. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  3. delphi 7: sous xp pro, appel adsi 'openobject' ->err syntaxe
    Par megs dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 22/04/2011, 09h42
  4. Réponses: 33
    Dernier message: 18/04/2005, 23h06
  5. [PRO*C] Recherche information
    Par Anonymous dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 04/04/2002, 17h53

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