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

PL/SQL Oracle Discussion :

Erreur de cr�ation de trigger avec UTL_FILE


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par d�faut Erreur de cr�ation de trigger avec UTL_FILE
    Bonjour, j'utilise Oracle 19C sur un serveur Unix AIX 7, avec SQLDeveloper je veux cr�er un trigger sur un delete afin de copier l'enregistrement delet� dans un fichier texte.

    j'ai donc �crit ceci :

    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
    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( CURRENT.CODDTQ = 'XVT')
     
    declare
            ID_FILE             UTL_FILE.FILE_TYPE;
            MODE_OPEN           CHAR(1) := 'A';
    begin
    ID_FILE := UTL_FILE.FOPEN('/tmp','trg_del_APMFCQ.log',MODE_OPEN);
    UTL_FILE.PUT_LINE(ID_FILE, old.CODDTQ || ' ' || old.DATCRE || ' ' || old.HEUCRE || ' ' || old.VARDTQ);
    UTL_FILE.FCLOSE(ID_FILE);
     
    end ;
    /
    � la compilation j'ai cette erreur :

    Rapport d'erreur -
    ORA-00936: expression absente
    00936. 00000 - "missing expression"
    *Cause:
    *Action:
    si une �me charitable est sur ce forum et peut me donner un coup de main ??
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    D�veloppeur Oracle
    Inscrit en
    D�cembre 2019
    Messages
    1 176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur Oracle

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 1 176
    Par d�faut
    Bonjour,

    Ce serait bien d'avoir la ligne en erreur. Mais je vois plusieurs soucis:
    - Dans la clause WHEN tu utilises CURRENT.CODDTQ, mais c'est plut�t OLD.CODDTQ non?

    - Tu as oubli� les 2-points pour les :old r�f�renc�s dans utl_file.put_line. D'ailleurs tu peux simplement faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || :old.DATCRE || :old.HEUCRE || :old.VARDTQ);
    - Pour UTL_FILE.FOPEN, il faut pr�ciser un directory Oracle, pas un chemin sur le serveur

  3. #3
    Membre actif
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par d�faut
    Merci de bien vouloir m'aider,

    pour les ":" et le CURRENT, j'avais fait des essais ...

    le probl�me avec les old dans le PUT_LINE, c'est qu'il ne les reconnait pas :

    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
    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')
     
    declare
            ID_FILE             UTL_FILE.FILE_TYPE;
            MODE_OPEN           CHAR(1) := 'A';
    begin
    /*ID_FILE := UTL_FILE.FOPEN('/tmp','trg_del_APMFCQ.log',MODE_OPEN);*/
    ID_FILE := ('/tmp','trg_del_APMFCQ.log',MODE_OPEN);
    UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || :old.VARDTQ);
    /*UTL_FILE.FCLOSE(ID_FILE);*/
     
    end ;
    /
    � la compilation il me demande d'entrer une valeur de liaison pour "old" .... et si je renseigne "old" comme s'est marqu� par d�faut, j'ai cette erreur :
    Erreur(5,1): PL/SQL: Statement ignored
    Erreur(5,12): PLS-00382: expression du mauvais type

  4. #4
    Membre actif
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par d�faut
    Je viens de faire un nouvel essai avec :

    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
    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')
     
    declare
            ID_FILE             UTL_FILE.FILE_TYPE;
            MODE_OPEN           CHAR(1) := 'A';
    begin
    ID_FILE := UTL_FILE.FOPEN('/tmp','trg_del_APMFCQ.log',MODE_OPEN);
    UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || :old.VARDTQ);
    UTL_FILE.FCLOSE(ID_FILE);
     
    end ;
    /
    et l� la compilation est OK

    Question : quand tu dis que le r�pertoire ne doit pas �tre sur le serveur Unix ??? je ne comprends pas

  5. #5
    Membre Expert
    Homme Profil pro
    D�veloppeur Oracle
    Inscrit en
    D�cembre 2019
    Messages
    1 176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur Oracle

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 1 176
    Par d�faut
    Il faut cr�er un r�pertoire au sens Oracle:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    create or replace directory TMP_DIR as '/tmp';
    grant read,write on directory TMP_DIR to <user_qui_utilise_la_proc>;
    Et apr�s tu pr�cises ce r�pertoire dans utl_file.fopen

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    UTL_FILE.FOPEN('TMP_DIR','trg_del_APMFCQ.log',MODE_OPEN);

  6. #6
    Membre actif
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par d�faut
    J'�tais arriv� � cette conclusion et j'ai cr�� le repertoire Oracle puis j'ai donn� les permissions � partir de SYSDBA :

    SQL> create or replace directory ora_log as '/tmp';
    
    Directory created.
    
    SQL> grant read,write on directory ora_log to FGE50P087;
    
    Grant succeeded.
    
    SQL> 

    La compilation du trigger :

    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
    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')
     
    declare
            ID_FILE             UTL_FILE.FILE_TYPE;
            MODE_OPEN           CHAR(1) := 'A';
    begin
    ID_FILE := UTL_FILE.FOPEN('ora_log','trg_del_APMFCQ.log',MODE_OPEN);
    UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || :old.VARDTQ);
    UTL_FILE.FCLOSE(ID_FILE);
     
    end ;
    /
    j'ai l'erreur suivante :

    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')

    declare
    ID_FILE UTL_FILE.FILE_TYPE
    Rapport d'erreur -
    ORA-00990: privil�ge absent ou non valide
    00990. 00000 - "missing or invalid privilege"
    *Cause:
    *Action:

  7. #7
    Membre actif
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par d�faut
    Je vois bien le directory Oracle dans ALL_DIRECTORIES avec le owner = SYS ....
    Si j'essai d'ex�cuter le package UTL_FILE � partir de mon user ... je n'ai pas les privil�ges , pourtant j'ai fait un "GRANT ANY PROCEDURE TO user"

    du coup je ne sais pas si mon user n'a pas les droits sur la cr�ation du fichier ou sur l'ex�cution du du FOPEN ...

Discussions similaires

  1. Erreur de syntaxe sur trigger avec mysql 5.1
    Par WhoIsTiti dans le forum SQL Proc�dural
    R�ponses: 4
    Dernier message: 29/03/2012, 07h18
  2. erreur ORA-06502 avec UTL_FILE
    Par leftyy dans le forum PL/SQL
    R�ponses: 1
    Dernier message: 03/11/2010, 17h14
  3. [XL-2007] Erreur 1004 lors de la cr�ation de TCD avec l'enregistreur de macro
    Par ryobanga dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 25/02/2010, 15h35
  4. [MySQL] MySQL: erreur syntax cr�ation de trigger
    Par hammag dans le forum PHP & Base de donn�es
    R�ponses: 2
    Dernier message: 07/05/2009, 12h30
  5. PB AVEC UTL_FILE.PUT (ERREUR UTL_FILE.WRITE_ERROR)
    Par satanas dans le forum Oracle
    R�ponses: 10
    Dernier message: 25/07/2005, 08h41

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