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 d'exécution d'un trigger et option manquante ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut Erreur d'exécution d'un trigger et option manquante ?
    Bonjour,

    Je rencontre le problème suivant dont j'aimerais que vous m'aidiez à comprendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO RANDRIANO.RDR_MYClasses (ID, Name, Type) values (RANDRIANO.mypkg_guid.guidclass,'Class 4', '4')
     
    ORA-00922: option erronée ou absente
    ORA-06512: à "RANDRIANO.RDR_CREATETAB", ligne 11
    ORA-06512: à "RANDRIANO.A_I_RDR_MYClasses", ligne 75
    ORA-04088: erreur lors d'exécution du déclencheur 'RANDRIANO.A_I_RDR_MYClasses'
    Les codes correspondants a ce trigger et à cette procédure est:

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    CREATE OR REPLACE  PROCEDURE RANDRIANO."RDR_CREATETAB"  (v_tab
        varchar2)
     
    is
        v_cdef varchar2 (256);
     
    pragma autonomous_transaction;
     
    begin
     
    	 EXECUTE IMMEDIATE
       'CREATE TABLE  ' || v_tab ||
       ' ( idequipment varchar2(38) PRIMARY KEY)';
     
    end;
     
    CREATE OR REPLACE TRIGGER RANDRIANO."A_I_RDR_MYCLASSES" AFTER
    INSERT ON RANDRIANO.RDR_MYCLASSES FOR EACH ROW Declare
    	v_Name varchar2 (256);
    	v_Type int;
    	v_TableName varchar2 (512);
    	v_DEFTableName varchar2 (512);
    	 v_ColumnName varchar2 (512);
    	v_ColumnType varchar2 (512);
    	v_ColumnTypeChar varchar2 (512);
    	v_ColumnPrecision int;
    	v_ColumnHasPrecision number(1);
    	v_IsNullable varchar2(25);
    	v_Default varchar2 (256);
    	v_ColumnDEFAULT varchar2 (4000);
    	v_fk_name varchar2(30);
    	v_namefk varchar2(23);
    	v_fk_name1 varchar2(30);
    	v_namefk1 varchar2(14);
    	v_cdef varchar2(256);
     
     
     
     
     
    BEGIN
     
    PKG_UPDATEAVAINS.v_compt := PKG_UPDATEAVAINS.v_compt+1;
    --dbms_output.put_line('ici');
     
    select :new.name CLE into v_name from dual RDR_MYCLASSES;
     
    select :new.type CLE into v_type from dual RDR_MYCLASSES;
     
     
     
    v_TableName := 'RDR_ATT_Equi_'||v_Name;
     
    -- begin if 
     
    IF (v_Type = 1) then
    		v_DEFTableName := 'EQUIPMENT';
    end if;
    	IF (v_Type = 2) then
    		v_DEFTableName := 'TYPE';
    		end if ;
    	IF (v_Type = 4)then
    		v_DEFTableName := 'RDR_VARS';
    		end if;
    	IF (v_Type = 8)then
    		v_DEFTableName := 'PLUGMAP';
    		end if ;
    	IF (v_Type = 16) then
    		v_DEFTableName := 'CONNECTION';
    		end if ;
    	IF (v_Type = 32)then
    		v_DEFTableName:= 'RULE';
    		end if ;
    	IF (v_Type = 64) then
    		v_DEFTableName := 'ACCESS';
    		end if ;
     
    	IF (v_Type = 128) then
    		v_DEFTableName := 'OBJ_DEF';
    		end if ;
     
    	IF (v_Type = 256) then
    		v_DEFTableName := 'SIMUL';
    		end if ;
     
    --end if 
     
    --create table class
     
    v_tablename := substr(v_tablename,1,30);
     
    rdr_createtab(v_TableName); -- ligne n° 75 de ce trigger
    Je me demande si c'est un problème de casse ou bien un problème de roles c'est à dire de GRANT mais je remarque que le schéma ne doit pas être un schéma système (sysman)
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    t'es un grand garçon quand même... le débugage on peut pas le faire pour toi, on a pas accès à ta base de donnée et apparemment le trigger n'est pas complet

    En tout cas, en terme d'écriture on peut déjà signaler 2 SELECT inutiles et du coup 2 variables en plus qui ne servent à rien. Des IF à gogo au lieu de CASE. Rend le plus lisible et tu trouveras surement l'erreur tout seule... un bon moyen de débugger est d'exécuter le code à la main dans un session pour commencer.

    Edit : à tout hasard je dirais bien qu'il est possible que tu envoies NULL dans le paramètre de ta procédure

  3. #3
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    Il semble que l'erreur vienne du trigger A_I_EED_SET_CLASSES, dont on n'a pas le code
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est pas faux

  5. #5
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Bon, désolé j'ai posté le mauvais rapport d'erreur. Maintenant c'est le bon, voir le 1er message !!
    J'ai copié le code jusqu'au point où l'erreur se produit c'est à dire la ligne 75 un appel à une procédure !!!
    orafrance ! Je n'ai pas l'intention de profiter des gens pour déboguer mon code mais je me demande si cette erreur est courante et qui en a l'expérience
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    cette erreur est en effet courante mais dépend complètement du code. Relis mon message et suis mes recommandations

  7. #7
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Pour info :
    PL/SQL n'est pas case-sensitive

    Le problème ne viens donc pas de là.

    Pour le reste j'ai un peu de mal à me mettre dedans...
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  8. #8
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Pour être plus clair,
    ORA-06512: à "RANDRIANO.A_I_RDR_MYClasses", ligne 75 => il s'agit d'erreur d'exécution de la 75è ligne du trigger A_I_RDR_MYClasses qui est rdr_createtab(v_TableName) !!! J'ai parlé de manque de GRANT car avant, j'avais un problème de privilèges insuffisants pour la création de ce trigger même pour exécuter une procedure de création de table, donc j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT CREATE TABLE TO RANDRIANO;
    et ça marchait !
    Maintenant le problème c'est lors de l'exécution du trigger même !
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXECUTE IMMEDIATE
       'CREATE TABLE  ' || v_tab ||
       ' ( idequipment varchar2(38) PRIMARY KEY)';
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBMS_OUTPUT.PUT_LINE(   'CREATE TABLE  ' || v_tab ||
       ' ( idequipment varchar2(38) PRIMARY KEY)');
    Et teste le résultat affiché dans SQL*Plus... on va pas t'apprendre à débogguer quand même

  10. #10
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Ce remplacement conduit à une autre erreur (ORA-01735: option ALTER TABLE non valide). Comme vous l'avez dit, le forum n'est pas pour déboguer mes programmes.
    Je me demande seulement à quoi sert ce test par remplacement ?
    Dans mon CREATE TABLE, est-il nécessaire de préciser le schéma ou pas ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    oui il vaut mieux

  12. #12
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Et bon, comme je le dis toujours dans ma signature
    Citation Envoyé par randriano
    Le bug se situe toujours entre la chaise et le clavier (70 %).
    C'est maintenant que je suis au courant qu'Oracle ne supporte pas les ESPACES dans les noms de table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO RANDRIANO.RDR_MYClasses (ID, Name, Type) VALUES (RANDRIANO.mypkg_guid.guidclass,'Class 4', '4')
    Le trigger de cette classe (AFTER INSERT) fonctionne comme suit : il crée une table RDR_+Type c-à-d ici RDR_Class 4 qui ne se fait pas en Oracle, donc il suffit d'enlever l'espace !!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  13. #13
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par kalyparker Voir le message
    Pour info :
    PL/SQL n'est pas case-sensitive

    Le problème ne viens donc pas de là.
    Faux :
    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 FUNCTION "wmc_FTEST" (p1 IN NUMBER)
    RETURN NUMBER 
    IS
    BEGIN
    	RETURN p1 * 10;
    END;
     
    SELECT wmc_FTEST(1)
    FROM dual
    ORA-00904: "WMC_FTEST": invalid identifier
     
    SELECT "wmc_FTEST"(1)
    FROM dual
    10
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Vrai !

    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
    SQL>CREATE FUNCTION "FTEST" (p1 IN NUMBER)
      2  RETURN NUMBER 
      3  IS
      4  BEGIN
      5   RETURN p1 * 10;
      6  END;
      7  /
     
    Function created.
     
    SQL>
    SQL>SELECT ftest(1)
      2  FROM dual;
     
      FTEST(1)
    ----------
            10
    Dans le cas présent il n'y a pas de minuscule dans le nom

  15. #15
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Parce que Oracle passe le nom de ta fonction dans ton select en UPPER.
    C'est pas ce que j'appelle du CASE INSENSITIVE

    Dans ton cas c'est comme si tu avais codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FTEST(1) FROM DUAL
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  16. #16
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Je sais bien, mais dire que Oracle est case-sensitive est également faux. Il l'est uniquement si le nom de l'objet est entre guillemet ce qui n'est pas recommandé

  17. #17
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Oui en fait Oracle n'est ni l'un, ni l'autre..
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  18. #18
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par McM Voir le message
    Oui en fait Oracle n'est ni l'un, ni l'autre..
    bien au contraire

  19. #19
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Oracle et pl/sql
    1) sensible à la casse
    2) ne supportant les ESPACES dans les noms de tables ou de procédures

    et quoi d'autres ??
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  20. #20
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il me semble qu'un nom d'objet ne peut pas commencer par un chiffre.

Discussions similaires

  1. Erreurs lors d'exécution d'un trigger
    Par balota2012 dans le forum Oracle
    Réponses: 7
    Dernier message: 23/11/2012, 11h56
  2. Récupérer un erreur sur l'exécution d'un trigger
    Par tchoimars dans le forum PL/SQL
    Réponses: 1
    Dernier message: 06/06/2007, 16h07
  3. [CR8][VB6] Erreur d'exécution 20533
    Par pvava dans le forum SDK
    Réponses: 1
    Dernier message: 01/02/2005, 10h27
  4. Erreurs d'exécution sous delphi 5
    Par nkd dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2004, 17h25
  5. [Apache Perl] Erreur à l'exécution de mes cgi
    Par GLDavid dans le forum Apache
    Réponses: 4
    Dernier message: 28/08/2004, 20h23

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