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 10g blocks basés trigger ORA 0001


Sujet :

Forms Oracle

  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut forms 10g blocks basés trigger ORA 0001
    j'ai un souci avec un block basé sur une table contenant un trigger.
    la table se nomme ALJ_ECRITURE et le 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 ALJ.TRIGG_ECRITURE_CODE
    BEFORE INSERT
    ON ALJ.ALJ_ECRITURE 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
      IF (:NEW.ALJ_ECR_CODE IS NULL) THEN 
         select To_Char(SYSDATE,'YYYY')||:NEW.ALJ_ECR_PC_CODE||LPAD( To_number(nvl(max(substr(ALJ_ECR_CODE,9)),0)) + 1,11,0 )
           into :NEW.ALJ_ECR_CODE
           from alj_ecriture
          where substr(ALJ_ECR_CODE,1,4) = To_Char(SYSDATE,'YYYY')
            and substr(ALJ_ECR_CODE,5,3) = :NEW.ALJ_ECR_PC_CODE;
      END IF;
    END;
    /
    J'ai un module basé sur la table donc je fais un simple
    commit_form
    pour enregistrer les données dans la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    F Get_Item_Property('ALJ_ECRITURE.valider', ENABLED) = 'TRUE' THEN
    	Do_Key('Commit_Form');
    	P_Clear;
    END IF;
    P_Clear
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Go_Block('ALJ_ECRITURE');
      Clear_Form(NO_VALIDATE, FULL_ROLLBACK);
     
      Go_Block('ALJ_ECRITURE1');
      Clear_Form(NO_VALIDATE, FULL_ROLLBACK);
     
      Go_Block('ALJ_ECRITURE2');
      Clear_Form(NO_VALIDATE, FULL_ROLLBACK);
     
      :ALJ_ECRITURE.ALJ_ECR_JOURNEE   := SYSDATE;
      Init_Form;
    Init_Form
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    PROCEDURE Init_Form IS
      cursor c_data is
    	select ALJ_OP_DEB_CPT,
             ALJ_OP_ECR_1_CPT,
             ALJ_OP_ECR_2_CPT,
             ALJ_OP_ECR_3_CPT,
             ALJ_OP_ECR_4_CPT,
             ALJ_OP_ECR_1_PERCENT,
             ALJ_OP_ECR_2_PERCENT,
             ALJ_OP_ECR_3_PERCENT,
             ALJ_OP_ECR_4_PERCENT,
             ALJ_OP_JRN_CODE
        from ALJ_OPERATION
     where ALJ_OP_CODE = :GLOBAL.OP_CODE;
     c_d c_data%rowtype;
     
     cursor c_lib_cpt(cpt varchar2) is
     select alj_cp_lib  
       from alj_compte 
      where alj_cp_code = cpt;
     
    BEGIN
    	null;
    	Open c_data;
      Fetch c_data into c_d;
      Copy(c_d.ALJ_OP_DEB_CPT,'ALJ_ECRITURE.ALJ_ECR_DEB_CPT');
      --POPULATE_LIST_WITH_QUERY('ALJ_ECRITURE.ALJ_ECR_DEB_CPT','select alj_cp_code||'' - ''|| alj_cp_lib,alj_cp_code from alj_compte where alj_cp_code in (''512.2'',''515.2'')') ; 
      --POPULATE_LIST_WITH_QUERY('ALJ_ECRITURE.ALJ_ECR_ECR_1_CPT','select alj_cp_code||'' - ''|| alj_cp_lib,alj_cp_code from alj_compte where alj_cp_code like ''390.300.%''') ; 
     
      --Copy(c_d.ALJ_OP_ECR_1_CPT,'ALJ_ECRITURE.ALJ_ECR_ECR_1_CPT'); 
      Copy(c_d.ALJ_OP_ECR_2_CPT,'ALJ_ECRITURE.ALJ_ECR_ECR_2_CPT');
      Copy(c_d.ALJ_OP_ECR_3_CPT,'ALJ_ECRITURE.ALJ_ECR_ECR_3_CPT');
      Copy(c_d.ALJ_OP_ECR_4_CPT,'ALJ_ECRITURE.ALJ_ECR_ECR_4_CPT');
      Copy(c_d.ALJ_OP_ECR_1_PERCENT,'ALJ_ECRITURE.ALJ_ECR_ECR_1_PERCENT');
      Copy(c_d.ALJ_OP_ECR_2_PERCENT,'ALJ_ECRITURE.ALJ_ECR_ECR_2_PERCENT');
      Copy(c_d.ALJ_OP_ECR_3_PERCENT,'ALJ_ECRITURE.ALJ_ECR_ECR_3_PERCENT');
      Copy(c_d.ALJ_OP_ECR_4_PERCENT,'ALJ_ECRITURE.ALJ_ECR_ECR_4_PERCENT');
     
      Copy(c_d.ALJ_OP_ECR_1_PERCENT,'GLOBAL.per_cent1');
      Copy(c_d.ALJ_OP_ECR_2_PERCENT,'GLOBAL.per_cent2');
      Copy(c_d.ALJ_OP_ECR_3_PERCENT,'GLOBAL.per_cent3');
      Copy(c_d.ALJ_OP_ECR_4_PERCENT,'GLOBAL.per_cent4');
      Copy(c_d.ALJ_OP_JRN_CODE,'ALJ_ECRITURE.ALJ_JRN_CODE');
     
      :ALJ_ECRITURE.ALJ_OP_CODE      := :GLOBAL.OP_CODE;
      :ALJ_ECRITURE.ALJ_ECR_STAT     := 'S';
     
      Open c_lib_cpt(:ALJ_ECRITURE.ALJ_ECR_DEB_CPT);
      Fetch c_lib_cpt into :ALJ_ECRITURE.ALJ_ECR_DEB_LIB;
      If c_lib_cpt%notfound then :ALJ_ECRITURE.ALJ_ECR_DEB_LIB := null; end if;
      Close c_lib_cpt;
     
      Open c_lib_cpt(:ALJ_ECRITURE.ALJ_ECR_ECR_1_CPT);
      Fetch c_lib_cpt into :ALJ_ECRITURE.ALJ_ECR_ECR_1_LIB;
      If c_lib_cpt%notfound then :ALJ_ECRITURE.ALJ_ECR_ECR_1_LIB := null; end if;
      Close c_lib_cpt;
     
      /*if (:ALJ_ECRITURE.ALJ_ECR_DEB_CPT is null) then
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_DEB_CPT',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_DEB_LIB',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_DEB_MT',VISIBLE,PROPERTY_FALSE);
      end if;
      
      if (:ALJ_ECRITURE.ALJ_ECR_ECR_1_CPT is null) then
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_1_CPT',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_1_LIB',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_1_MT',VISIBLE,PROPERTY_FALSE);
      end if;
      */
      if (:ALJ_ECRITURE.ALJ_ECR_ECR_2_CPT is null) then
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_2_CPT',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_2_LIB',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_2_MT',VISIBLE,PROPERTY_FALSE);
      else
       	 Open c_lib_cpt(:ALJ_ECRITURE.ALJ_ECR_ECR_2_CPT);
         Fetch c_lib_cpt into :ALJ_ECRITURE.ALJ_ECR_ECR_2_LIB;
         If c_lib_cpt%notfound then :ALJ_ECRITURE.ALJ_ECR_ECR_2_LIB := null; end if;
         Close c_lib_cpt;
      end if;
     
      if (:ALJ_ECRITURE.ALJ_ECR_ECR_3_CPT is null) then
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_3_CPT',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_3_LIB',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_3_MT',VISIBLE,PROPERTY_FALSE);
      else
         Open c_lib_cpt(:ALJ_ECRITURE.ALJ_ECR_ECR_3_CPT);
         Fetch c_lib_cpt into :ALJ_ECRITURE.ALJ_ECR_ECR_3_LIB;
         If c_lib_cpt%notfound then :ALJ_ECRITURE.ALJ_ECR_ECR_3_LIB := null; end if;
         Close c_lib_cpt;
      end if;
     
      if (:ALJ_ECRITURE.ALJ_ECR_ECR_4_CPT is null) then
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_4_CPT',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_4_LIB',VISIBLE,PROPERTY_FALSE);
      	 Set_Item_Property('ALJ_ECRITURE.ALJ_ECR_ECR_4_MT',VISIBLE,PROPERTY_FALSE);
      else
      	 Open c_lib_cpt(:ALJ_ECRITURE.ALJ_ECR_ECR_4_CPT);
         Fetch c_lib_cpt into :ALJ_ECRITURE.ALJ_ECR_ECR_4_LIB;
         If c_lib_cpt%notfound then :ALJ_ECRITURE.ALJ_ECR_ECR_4_LIB := null; end if;
         Close c_lib_cpt;
      end if;
     
     
      if c_data%notfound then
    	   null;
      end if;
      close c_data;
      null;
      INIT_BLOC1;
      INIT_BLOC2;
      --INIT_BLOC3;
     
    END;
    Mon problème est le suivante:
    quand je fais un premier enregistrement, ça passe
    un second sans fermer la forme et la reouvrir, il m'affiche l'erreur ORA 0001
    mais quand je ferme la forme et je l'a relance le premier passe et les autres tentatives d'insertion m'affiche l'erreur.
    Le trigger est sensé gerer automatiquement la clé sans doublons alors pourquoi cette erreur?

  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
    c'est pas un bloc basé ? Pourquoi tu remplis toi-même le bloc ?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    si c'est un bloc basé, je ne remplis pas les données provenant de la table correspondante mais j'ai rajouter des champs non basé au block basé. Donc pour avoir les valeurs de ces champs j’écris un script pour récupérer ces valeurs.
    Néanmoins mon problème est résolu. J'utilisais un Clear_Form au lieu d'un Clear_Block. C'était là mon problème car il vidait les champs de l’entête
    Merci
    Cependant je voudrais savoir comment récupérer le type de canvas dans le script avec get_canvas_property ou autre ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/04/2007, 10h47
  2. Réponses: 6
    Dernier message: 08/03/2007, 17h23
  3. Réponses: 10
    Dernier message: 30/01/2007, 09h29
  4. [Forms 10g] ora-06502 avec le package dbms_lob
    Par salim11 dans le forum Forms
    Réponses: 2
    Dernier message: 23/01/2007, 19h40
  5. [Forms 10g] ORA-12154
    Par zinabd dans le forum Oracle
    Réponses: 6
    Dernier message: 11/01/2006, 01h29

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