Docstoc

Les20

Document Sample
Les20 Powered By Docstoc
					Traitement des transactions




 Copyright © Oracle Corporation, 2002. Tous droits réservés.
                             Objectifs


A la fin de ce chapitre, vous pourrez :
 • expliquer le processus utilisé par Forms pour
     appliquer des modifications à la base de données
 • décrire la séquence des événements du processus
     de commit
 • compléter le traitement des transactions
 • allouer des numéros de séquence aux
     enregistrements lorsqu'ils sont appliqués aux
     tables
 • implémenter un tableau LMD



           Copyright © Oracle Corporation, 2002. Tous droits réservés.
        Présentation du traitement des
                transactions
         FORM A
 Action Edit                              Transaction (Début)
 Save

Bloc 1                                                    INSERT INTO Table1
Nouvel enregistrement
Enregistrement mis à jour
                                                          UPDATE Table1


Bloc 2                                                    DELETE FROM Table2
Enregistrement mis à jour
Enregistrement supprimé
                                                          UPDATE Table2



                                                          Commit work;
                     Transaction (Fin)


               Copyright © Oracle Corporation, 2002. Tous droits réservés.
        Présentation du traitement des
                transactions

Le traitement des transactions inclut deux phases :
 • POST :
     – Ecriture dans les tables basées des modifications
       apportées aux enregistrements
     – Exécution de déclencheurs transactionnels
•   COMMIT : Exécution du commit dans la base de
    données
Les erreurs provoquent :
 • l'annulation des modifications apportées à la base
    de données
 • un message d'erreur


            Copyright © Oracle Corporation, 2002. Tous droits réservés.
       La séquence des événements du
            processus de commit
                          Commit de la Form


                                 Pre-Commit
 2
                            Validation du bloc

D'autres
enregistrements ?                Pre-Delete


            On-Delete                                   Suppression
                                                         d'une ligne


                                 Post-Delete
                                        1


             Copyright © Oracle Corporation, 2002. Tous droits réservés.
La séquence des événements du processus de commit
                                                1

                         INSERT                              UPDATE          D'autres
                                                                             enregistrements ?
           Copy Value from Item


                     Pre-Insert                                  Pre-Update

           Vérification de l'unicité                        Vérification de l'unicité


         On-Insert      Insertion d'une ligne                                Mise à jour
                                                        On-Update
                                                                             de la ligne

                     Post-Insert                            Post-Update
     2

   D'autres blocs ?           Post-Forms-Commit

                                                                Commit des modifications
                                  Stop                           Post-Database-Commit


                     Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Caractéristiques des déclencheurs de
                   Commit

•   Pre-Commit : s'exécute une fois si des
    modifications sont apportées à la Form ou si des
    modifications sans commit sont envoyées.
•   Pre-DML et Post-DML
•   On-DML : s'exécute pour chaque enregistrement,
    en remplaçant l'instruction LMD par défaut sur la
    ligne.
    Utilisez les sous-programmes intégrés
    DELETE_RECORD, INSERT_RECORD,
    UPDATE_RECORD.




            Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Caractéristiques des déclencheurs de
                   Commit

•   Post-Forms-Commit : s'exécute une fois, même si
    aucune modification n'est apportée.
 • Post-Database-Commit : s'exécute une fois, même
    si aucune modification n'est apportée.
Remarque : L'échec d'un déclencheur de Commit
entraîne l'annulation jusqu'au savepoint.




           Copyright © Oracle Corporation, 2002. Tous droits réservés.
   Utilisations courantes des déclencheurs
                  de Commit

             Vérification des autorisations utilisateur ;
Pre-Commit
             configuration d'un verrouillage spécial
             Journalisation ; implémentation d'une règle
Pre-Delete
             de suppression de clé étrangère
             Génération de numéros de séquence ; journalisation ;
Pre-Insert   colonnes générées automatiquement ;
             vérification de contraintes
             Journalisation ; implémentation d'une règle de
Pre-Update   mise à jour de clé étrangère ; colonnes générées
             automatiquement ; vérification de contraintes




              Copyright © Oracle Corporation, 2002. Tous droits réservés.
Utilisations courantes des déclencheurs
               de Commit

                                          Remplacement d'instructions
On-Insert/Update/Delete
                                          LMD de bloc par défaut

                                           Vérification de contraintes
Post-Forms-Commit                          multilignes complexes
                                           Test de la réussite du commit ;
Post-Database-Commit                       test des POST sans commit




            Copyright © Oracle Corporation, 2002. Tous droits réservés.
                   Cycle d'une mise à jour
                                        Elément         Colonne         Données Verrouillé
          Interrogation                                              d'annulation
                                             20             20
         Mise à jour de
l'enregistrement dans la Form                30             20


              [Save]                         30             20


           Pre-Update                        30             20


        Ligne mise à jour                    30             30                  20


           Post-Update                       30             30                  20


              Commit                           30              30


                  Copyright © Oracle Corporation, 2002. Tous droits réservés.
         Validation de la suppression

•   Déclencheur Pre-Delete
•   Vérifications finales avant suppression de la ligne
DECLARE
      CURSOR C1 IS
      SELECT ’anything’ FROM ORDERS
      WHERE customer_id = :CUSTOMERS.customer_id;
BEGIN
      OPEN C1;
      FETCH C1 INTO :GLOBAL.dummy;
      IF C1%FOUND THEN
           CLOSE C1;
           MESSAGE(’There are orders for this customer!’);
           RAISE form_trigger_failure;
      ELSE
           CLOSE C1;
      END IF;
END;


            Copyright © Oracle Corporation, 2002. Tous droits réservés.
   Attribuer des numéros de séquence

SELECT   ORDERS_SEQ.nextval
INTO     :ORDERS.order_id
FROM     SYS.dual;


                                                Insertion
   Pre-Insert


                                  ID

                                   601      Valeur Valeur




                                                                         Base de
                                                                         données
         Séquence

           Copyright © Oracle Corporation, 2002. Tous droits réservés.
         Conserver une trace d'audit


•   Ecrivez les modifications dans des tables non
    basées.
•   Recueillez des statistiques sur les modifications
    appliquées.
Exemple Post-Insert :

 :GLOBAL.insert_tot :=
   TO_CHAR(TO_NUMBER(:GLOBAL.insert_tot)+1);




            Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Tester les résultats des instructions LMD
              dans les déclencheurs

•     SQL%FOUND
•     SQL%NOTFOUND
•     SQL%ROWCOUNT

UPDATE ORDERS
 SET order_date = SYSDATE
WHERE order_id = :ORDERS.order_id;
IF SQL%NOTFOUND THEN
  MESSAGE(’Record not found in database’);
  RAISE form_trigger_failure;
END IF;


            Copyright © Oracle Corporation, 2002. Tous droits réservés.
 Instructions LMD exécutées au cours du
           traitement du commit

INSERT INTO base_table             (base_column, base_column,...)
VALUES                             (:base_item, :base_item, ...)


UPDATE   base_table
SET      base_column = :base_item, base_column =
               :base_item, ...
WHERE    ROWID = :ROWID


DELETE   FROM base_table
WHERE    ROWID = :ROWID




           Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Instructions LMD exécutées au cours du
              traitement du commit

Règles :
 • Les instructions LMD peuvent exécuter des
    déclencheurs de base de données.
 • Forms utilise et extrait le ROWID.
•    Les propriétés Update Changed Columns Only et
     Enforce Column Security affectent les instructions
     UPDATE.
•    Les instructions de verrouillage ne sont pas
     exécutées.




             Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Remplacer le traitement par défaut des
                transactions

 Autres déclencheurs transactionnels :

Déclencheur                     Sous-programme intégré Do-the-Right-Thing

On-Check-Unique                 CHECK_RECORD_UNIQUENESS
On-Column-Security              ENFORCE_COLUMN_SECURITY
On-Commit                       COMMIT_FORM
On-Rollback                     ISSUE_ROLLBACK
On-Savepoint                    ISSUE_SAVEPOINT
On-Sequence-Number              GENERATE_SEQUENCE_NUMBER

  Remarque : Ces déclencheurs sont normalement utilisés dans le
  cadre d'une connexion à des sources de données non-Oracle.

               Copyright © Oracle Corporation, 2002. Tous droits réservés.
   Remplacer le traitement par défaut des
               transactions

Déclencheurs transactionnels pour la connexion et la
déconnexion :

 Déclencheur               Sous-programme intégré Do-the-Right-Thing

 Pre-Logon                   -
 Pre-Logout                  -
 On-Logon                  LOGON
 On-Logout                 LOGOUT
 Post-Logon                  -
 Post-Logout                 -




               Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Exécution sur des sources de données
                 non-Oracle

•   Il existe deux méthodes d'exécution sur des
    sources de données non-Oracle :
     – Produits Oracle Transparent Gateway
     – Ecrire les déclencheurs transactionnels appropriés




            Copyright © Oracle Corporation, 2002. Tous droits réservés.
    Exécution sur des sources de données
                 non-Oracle

•   Se connecter avec Open Gateway :
     – Propriétés de module Form : Cursor Mode et
       Savepoint Mode
     – Propriétés de bloc : Key Mode et Locking Mode
•   Utiliser des déclencheurs transactionnels :
     – Appel de programmes 3GL
     – Propriété de bloc de données Database




            Copyright © Oracle Corporation, 2002. Tous droits réservés.
        Obtenir et définir le statut Commit
•   Statut Commit : détermine la façon dont l'enregistrement
    sera traité
•   SYSTEM.RECORD_STATUS :
    –   NEW
    –   INSERT (également provoqué par les éléments de contrôle)
    –   QUERY
    –   CHANGED
•   SYSTEM.BLOCK_STATUS :
     – NEW (peut contenir des enregistrements avec le statut
       INSERT)
     – QUERY (également possible pour le bloc de contrôle)
     – CHANGED (le bloc sera validé)
•   SYSTEM.FORM_STATUS : NEW, QUERY, CHANGED


               Copyright © Oracle Corporation, 2002. Tous droits réservés.
     Obtenir et définir le statut Commit


•   Comparaison des variables système et des sous-
    programmes intégrés pour le statut Commit
•   Sous-programmes intégrés pour obtenir et définir
    le statut Commit :
    – GET_BLOCK_PROPERTY
    – GET_RECORD_PROPERTY
    – SET_RECORD_PROPERTY




           Copyright © Oracle Corporation, 2002. Tous droits réservés.
     Obtenir et définir le statut Commit


•   Exemple : si le troisième enregistrement du bloc
    ORDERS est un enregistrement modifié dans la
    base de données, rétablissez le statut QUERY.
•   Avertissements :
    – Ne confondez pas statut Commit et statut de
      validation.
    – Le statut Commit est mis à jour au cours de la
      validation.




           Copyright © Oracle Corporation, 2002. Tous droits réservés.
                            Tableau LMD


  •    Effectue des insertions, des mises à jour et des
       suppressions de tableaux.
  •    Réduit considérablement le trafic du réseau
                                                 Moins d'allers-retours réseau
Empno Ename   Job         Hiredate                (le nombre exact dépend
                                                    de la taille du tableau)
1234 Jones Clerk 01-Jan-1995 2 insertions
1235 Smith Clerk 01-Jan-1995
                             2 mises à jour
1236 Adams Clerk 01-Jan-1995
                             1 suppression
1237 Clark Clerk 01-Jan-1995                                                 Base de données




               Copyright © Oracle Corporation, 2002. Tous droits réservés.
      Effet du tableau LMD sur les déclencheurs
                    transactionnels

                    PRE-                                  PRE-
                                                                       S'exécute pour
Répété pour                       S'exécute                            chaque insertion,
chaque insertion,                                                      mise à jour, suppression
mise à jour,
                      LMD                                  LMD
suppression

                      POST-                                POST-
                                                                       S'exécute pour
                                  S'exécute                            chaque insertion,
                                                                       mise à jour, suppression

           Taille du tableau LMD = 1                        Taille du tableau LMD > 1




                    Copyright © Oracle Corporation, 2002. Tous droits réservés.
        Implémenter un tableau LMD


1. Activez l'option Array Processing.
2. Précisez une taille de tableau LMD supérieure à 1.
3. Définissez les clés primaires des blocs.




           Copyright © Oracle Corporation, 2002. Tous droits réservés.
                                Synthèse


Ce chapitre vous a permis d'apprendre que :
 • pour appliquer des modifications à la base de
    données, Forms exécute un post et un commit
 • la séquence des événements du processus de
    commit est la suivante :
    1.   Validation de la Form
    2.   Traitement du savepoint
    3.   Exécution de Pre-Commit
    4.   Validation du bloc (pour tous les blocs dans l'ordre)




              Copyright © Oracle Corporation, 2002. Tous droits réservés.
                               Synthèse
5. Exécution des instructions LMD :
   Suppression d'enregistrements : exécution de Pre-Delete,
   suppression de la ligne ou exécution de On-Delete,
   exécution de Post-Delete
   Insertion d'enregistrements : copie de la valeur de l'élément,
   exécution de Pre-Insert, vérification de l'unicité de
   l'enregistrement, insertion de la ligne ou exécution de
   On-Insert, exécution de Post-Insert
   Mise à jour d'enregistrements : exécution de Pre-Update,
   vérification de l'unicité de l'enregistrement, mise à jour de la
   ligne ou exécution de On-Update, exécution de Post-Update
6. Exécution du déclencheur Post-Forms-Commit
   Si l'opération en cours est COMMIT :
7. Exécution d'une instruction SQL-COMMIT
8. Exécution du déclencheur Post-Database-Commit


             Copyright © Oracle Corporation, 2002. Tous droits réservés.
                             Synthèse


•   Vous pouvez compléter le traitement des
    transactions à l'aide de déclencheurs :
    – Pre-Commit : s'exécute une fois si des
      modifications sont apportées à la Form ou si des
      modifications non validées sont envoyées.
    – [Pre | Post] – [Update | Insert | Delete]
    – On- [Update | Insert | Delete] :
      s'exécute pour chaque enregistrement, remplaçant
      ainsi les instructions LMD sur les lignes
      Exécution de fonctions par défaut par des sous-
      programmes intégrés :
      [UPDATE|INSERT|DELETE]_RECORD



           Copyright © Oracle Corporation, 2002. Tous droits réservés.
                              Synthèse

•   Utilisez le déclencheur Pre-Insert pour allouer des
    numéros de séquence aux enregistrements
    lorsqu'ils sont appliqués aux tables.
•   Vérifiez ou modifiez le statut Commit :
    – GET_BLOCK_PROPERTY, [GET |
      SET]_RECORD_STATUS
    – :SYSTEM.[FORM | BLOCK | RECORD]_STATUS
•   Utilisez des déclencheurs transactionnels pour
    remplacer ou compléter le traitement de commit
    par défaut.
•   Réduisez les allers-retours réseau en affectant la
    valeur Implement Array DML à la propriété de bloc
    DML Array Size.


            Copyright © Oracle Corporation, 2002. Tous droits réservés.
         Présentation de l'exercice 20


Dans cet exercice, vous allez :
 • remplir automatiquement des ID de commande à
   l'aide d'une séquence
 • remplir automatiquement des ID d'élément en
   ajoutant l'ID de commande en cours le plus élevé
 • personnaliser les messages de commit dans la
   Form CUSTOMERS
•   personnaliser l'écran de connexion dans la Form
    CUSTOMERS




           Copyright © Oracle Corporation, 2002. Tous droits réservés.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:3
posted:8/18/2012
language:French
pages:32