{"id":697,"date":"2023-10-01T08:41:52","date_gmt":"2023-10-01T12:41:52","guid":{"rendered":"https:\/\/ve2cuy.com\/?page_id=697"},"modified":"2024-09-18T10:07:00","modified_gmt":"2024-09-18T14:07:00","slug":"420-5d3-bd-declencheur","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/index.php\/420-5d3-bd-declencheur\/","title":{"rendered":"420-5D3 : BD &#8211; D\u00e9clencheur"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ve2cuy.com\/wp-content\/uploads\/2023\/10\/action-reaction.jpg\" alt=\"\" class=\"wp-image-702\" style=\"width:500px;height:178px\" width=\"500\" height=\"178\" srcset=\"https:\/\/ve2cuy.com\/wp-content\/uploads\/2023\/10\/action-reaction.jpg 580w, https:\/\/ve2cuy.com\/wp-content\/uploads\/2023\/10\/action-reaction-300x107.jpg 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">D\u00e9finition<\/h2>\n\n\n\n<p>Les d\u00e9clencheurs (ou \u00ab\u00a0triggers\u00a0\u00bb en anglais) sont des objets de base de donn\u00e9es qui r\u00e9agissent automatiquement \u00e0 certains \u00e9v\u00e9nements ou actions qui se produisent dans la base de donn\u00e9es. Ils sont utilis\u00e9s pour automatiser des t\u00e2ches, appliquer des r\u00e8gles m\u00e9tier (normes et standards), garantir la coh\u00e9rence des donn\u00e9es et effectuer des actions sp\u00e9cifiques lors de la modification d&rsquo;une table ou d&rsquo;une vue. <\/p>\n\n\n\n<p>Ils peuvent \u00eatre d\u00e9clench\u00e9s par des \u00e9v\u00e9nements tels que les op\u00e9rations d&rsquo;insertion, de mise \u00e0 jour ou de suppression de donn\u00e9es.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SYNTAXE<\/h2>\n\n\n\n<p>La syntaxe de base des d\u00e9clencheurs (triggers) dans Oracle suit un mod\u00e8le standard. <\/p>\n\n\n\n<p>Voici la structure de base d&rsquo;un d\u00e9clencheur Oracle :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE TRIGGER nom_du_declencheur\n{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE | {INSERT OR} UPDATE | {INSERT OR} DELETE}\nON nom_de_la_table\n[REFERENCING {OLD AS old | NEW AS new}]\n[FOR EACH {ROW | STATEMENT}]\nDECLARE\n  -- D\u00e9clarations de variables locales\nBEGIN\n  -- Logique du d\u00e9clencheur\n  -- Instructions SQL, conditions, logique m\u00e9tier, etc.\nEXCEPTION\n  WHEN nom_de_l_exception THEN\n    -- Gestion des exceptions (facultatif)\nEND nom_du_declencheur;\n\/<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Explications des \u00e9l\u00e9ments cl\u00e9s de la syntaxe :<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">CREATE OR REPLACE TRIGGER<\/mark><\/strong><\/code>: Cette clause indique que vous cr\u00e9ez ou remplacez un d\u00e9clencheur. Si le d\u00e9clencheur existe d\u00e9j\u00e0 avec le m\u00eame nom, il sera remplac\u00e9 par la nouvelle d\u00e9finition.<\/li>\n\n\n\n<li><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>nom_du_declencheur<\/strong><\/mark><\/code>: C&rsquo;est le nom que vous donnez \u00e0 votre d\u00e9clencheur. Il doit \u00eatre unique \u00e0 l&rsquo;int\u00e9rieur de la base de donn\u00e9es Oracle.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">{BEFORE | AFTER | INSTEAD OF}<\/mark><\/strong><\/code>: Cette partie indique quand le d\u00e9clencheur doit \u00eatre d\u00e9clench\u00e9. Les options courantes sont \u00ab\u00a0<strong><code>BEFORE<\/code><\/strong>\u00a0\u00bb (avant l&rsquo;action), \u00ab\u00a0<strong><code>AFTER<\/code><\/strong>\u00a0\u00bb (apr\u00e8s l&rsquo;action) et \u00ab\u00a0<strong><code>INSTEAD OF<\/code><\/strong>\u00a0\u00bb (\u00e0 la place de l&rsquo;action, principalement utilis\u00e9 pour les vues).<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">{INSERT | UPDATE | DELETE | {INSERT OR} UPDATE | {INSERT OR} DELETE}<\/mark><\/strong><\/code>: Cela sp\u00e9cifie le type d&rsquo;op\u00e9ration qui d\u00e9clenchera le d\u00e9clencheur. Vous pouvez choisir parmi les op\u00e9rations courantes telles que l&rsquo;insertion, la mise \u00e0 jour et la suppression. Vous pouvez \u00e9galement sp\u00e9cifier des combinaisons, par exemple, \u00ab\u00a0<strong><code>INSERT OR UPDATE<\/code><\/strong>\u00a0\u00bb pour d\u00e9clencher le d\u00e9clencheur lors d&rsquo;une insertion ou d&rsquo;une mise \u00e0 jour.<\/li>\n\n\n\n<li><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>ON nom_de_la_table<\/strong><\/mark><\/code>: Cela sp\u00e9cifie la table sur laquelle le d\u00e9clencheur sera appliqu\u00e9.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">[REFERENCING {OLD AS old | NEW AS new}]<\/mark><\/strong><\/code>: Cette partie est utilis\u00e9e pour r\u00e9f\u00e9rencer les anciennes et les nouvelles valeurs lors de la mise \u00e0 jour des donn\u00e9es. Elle est facultative et d\u00e9pend de la logique du d\u00e9clencheur.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">[FOR EACH {ROW | STATEMENT}]<\/mark><\/strong><\/code>: Cette clause indique si le d\u00e9clencheur doit \u00eatre ex\u00e9cut\u00e9 pour chaque ligne modifi\u00e9e (\u00ab\u00a0<strong><code>ROW<\/code><\/strong>\u00ab\u00a0) ou une fois pour toute l&rsquo;instruction SQL (\u00ab\u00a0<strong><code>STATEMENT<\/code><\/strong>\u00ab\u00a0).<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">DECLARE<\/mark><\/strong><\/code>: C&rsquo;est le d\u00e9but du bloc de d\u00e9claration de variables locales.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">BEGIN<\/mark><\/strong><\/code>: C&rsquo;est le d\u00e9but du bloc de code o\u00f9 vous d\u00e9finissez la logique du d\u00e9clencheur. C&rsquo;est l\u00e0 que vous effectuez des op\u00e9rations SQL, utilisez des conditions, mettez en place des r\u00e8gles m\u00e9tier, etc.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">EXCEPTION<\/mark><\/strong><\/code>: Cette section est utilis\u00e9e pour g\u00e9rer les exceptions qui peuvent survenir pendant l&rsquo;ex\u00e9cution du d\u00e9clencheur. Vous pouvez sp\u00e9cifier diff\u00e9rentes exceptions et d\u00e9finir comment elles doivent \u00eatre g\u00e9r\u00e9es.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">END<\/mark><\/strong> <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">nom_du_declencheur<\/mark><\/strong>;<\/code>: Cette ligne marque la fin du d\u00e9clencheur.<\/li>\n\n\n\n<li><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\/<\/mark><\/strong><\/code>: Le symbole \u00ab\u00a0\/\u00a0\u00bb est utilis\u00e9 pour ex\u00e9cuter le d\u00e9clencheur et le cr\u00e9er dans la base de donn\u00e9es.<\/li>\n<\/ul>\n\n\n\n<p>Cette structure de base permet de cr\u00e9er des d\u00e9clencheurs Oracle pour automatiser des actions ou appliquer des r\u00e8gles m\u00e9tier en r\u00e9ponse \u00e0 des modifications de donn\u00e9es sp\u00e9cifiques dans une table. Il est possible de personnaliser davantage la logique du d\u00e9clencheur en fonction des besoins de l&rsquo;application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Exemples d&rsquo;utilisation de d\u00e9clencheurs:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>D\u00e9clencheur de v\u00e9rification d&rsquo;int\u00e9grit\u00e9<\/strong> : Exemple : Supposons que vous souhaitiez vous assurer que le montant d&rsquo;une commande ne d\u00e9passe pas le cr\u00e9dit disponible d&rsquo;un client avant d&rsquo;ins\u00e9rer une nouvelle commande. Vous pouvez cr\u00e9er un d\u00e9clencheur pour cela.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   CREATE OR REPLACE TRIGGER VerifierCredit\n   BEFORE INSERT ON Commandes\n   FOR EACH ROW\n   DECLARE\n     v_credit_disponible NUMBER;\n   BEGIN\n     SELECT CreditDisponible INTO v_credit_disponible\n     FROM Clients\n     WHERE IDClient = :NEW.IDClient;\n\n     IF :NEW.MontantCommande > v_credit_disponible THEN\n       RAISE_APPLICATION_ERROR(-20001, 'Cr\u00e9dit insuffisant.');\n     END IF;\n   END VerifierCredit;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>D\u00e9clencheur de journalisation des modifications<\/strong> : Exemple : Vous pouvez cr\u00e9er un d\u00e9clencheur pour enregistrer chaque mise \u00e0 jour effectu\u00e9e sur une table dans un journal de modifications.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   CREATE OR REPLACE TRIGGER JournalisationModifications\n   AFTER UPDATE ON MaTable\n   FOR EACH ROW\n   BEGIN\n     INSERT INTO JournalModifications (TableModifiee, DateModification, Utilisateur)\n     VALUES ('MaTable', SYSTIMESTAMP, USER);\n   END JournalisationModifications;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>D\u00e9clencheur de g\u00e9n\u00e9ration automatique de cl\u00e9s<\/strong> : Exemple : Pour g\u00e9n\u00e9rer automatiquement un num\u00e9ro de commande unique pour chaque nouvelle commande ins\u00e9r\u00e9e dans une table, vous pouvez utiliser un d\u00e9clencheur.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   CREATE OR REPLACE TRIGGER GenererNumeroCommande\n   BEFORE INSERT ON Commandes\n   FOR EACH ROW\n   BEGIN\n     SELECT ma_sequence.NEXTVAL INTO :NEW.NumeroCommande FROM dual;\n   END GenererNumeroCommande;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>D\u00e9clencheur de validation des donn\u00e9es<\/strong> : Exemple : Vous pouvez cr\u00e9er un d\u00e9clencheur pour valider les donn\u00e9es avant leur insertion dans une table, par exemple, pour vous assurer que les dates de d\u00e9but et de fin d&rsquo;une r\u00e9servation sont valides.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   CREATE OR REPLACE TRIGGER ValiderDatesReservation\n   BEFORE INSERT ON Reservations\n   FOR EACH ROW\n   BEGIN\n     IF :NEW.DateDebut > :NEW.DateFin THEN\n       RAISE_APPLICATION_ERROR(-20002, 'La date de d\u00e9but doit pr\u00e9c\u00e9der la date de fin.');\n     END IF;\n   END ValiderDatesReservation;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li><strong>D\u00e9clencheur de synchronisation des donn\u00e9es<\/strong> : Exemple : Supposons que vous ayez une table principale \u00ab\u00a0Produits\u00a0\u00bb et une table de r\u00e9f\u00e9rence \u00ab\u00a0Stocks\u00a0\u00bb qui stocke la quantit\u00e9 de chaque produit en stock. Vous souhaitez mettre \u00e0 jour automatiquement la quantit\u00e9 en stock dans la table \u00ab\u00a0Stocks\u00a0\u00bb chaque fois qu&rsquo;une modification est apport\u00e9e \u00e0 la table \u00ab\u00a0Produits\u00a0\u00bb.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   CREATE OR REPLACE TRIGGER SynchroniserDonnees\n   AFTER INSERT OR UPDATE OR DELETE ON Produits\n   FOR EACH ROW\n   BEGIN\n     IF INSERTING THEN\n       -- Si une nouvelle ligne est ins\u00e9r\u00e9e dans la table Produits,\n       -- mettez \u00e0 jour la table Stocks avec la nouvelle quantit\u00e9 en stock.\n       INSERT INTO Stocks (IDProduit, QuantiteEnStock)\n       VALUES (:NEW.IDProduit, :NEW.Quantite);\n     ELSIF UPDATING THEN\n       -- Si une ligne existante est mise \u00e0 jour dans la table Produits,\n       -- mettez \u00e0 jour la table Stocks avec la nouvelle quantit\u00e9 en stock.\n       UPDATE Stocks\n       SET QuantiteEnStock = :NEW.Quantite\n       WHERE IDProduit = :NEW.IDProduit;\n     ELSIF DELETING THEN\n       -- Si une ligne est supprim\u00e9e dans la table Produits,\n       -- supprimez \u00e9galement l'entr\u00e9e correspondante dans la table Stocks.\n       DELETE FROM Stocks WHERE IDProduit = :OLD.IDProduit;\n     END IF;\n   END SynchroniserDonnees;<\/pre>\n\n\n\n<p>Dans cet exemple, le d\u00e9clencheur <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">SynchroniserDonnees<\/mark><\/code> est d\u00e9clench\u00e9 apr\u00e8s toute op\u00e9ration d&rsquo;insertion, de mise \u00e0 jour ou de suppression dans la table \u00ab\u00a0Produits\u00a0\u00bb. En fonction de l&rsquo;action effectu\u00e9e, il met \u00e0 jour automatiquement la table \u00ab\u00a0Stocks\u00a0\u00bb pour maintenir la coh\u00e9rence des donn\u00e9es entre les deux tables.<\/p>\n\n\n\n<p>Notez que cet exemple est simplifi\u00e9 \u00e0 des fins d&rsquo;illustration. Dans un environnement de production r\u00e9elle, la logique de synchronisation peut \u00eatre plus complexe et tenir compte de plusieurs facteurs, tels que la gestion des transactions, la gestion des erreurs, etc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Ces exemples mettent en lumi\u00e8re la polyvalence des d\u00e9clencheurs d&rsquo;une base de donn\u00e9es, qui permettent d&rsquo;automatiser des actions, de garantir l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es et de maintenir la coh\u00e9rence des donn\u00e9es dans la base de donn\u00e9es. Les d\u00e9clencheurs sont un \u00e9l\u00e9ment essentiel de la gestion de base de donn\u00e9es pour garantir la fiabilit\u00e9 des donn\u00e9es et l&rsquo;application des r\u00e8gles m\u00e9tier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color\">LABORATOIRE<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9finition Les d\u00e9clencheurs (ou \u00ab\u00a0triggers\u00a0\u00bb en anglais) sont des objets de base de donn\u00e9es qui r\u00e9agissent automatiquement \u00e0 certains \u00e9v\u00e9nements ou actions qui se produisent dans la base de donn\u00e9es. Ils sont utilis\u00e9s pour automatiser des t\u00e2ches, appliquer des r\u00e8gles m\u00e9tier (normes et standards), garantir la coh\u00e9rence des donn\u00e9es et effectuer des actions sp\u00e9cifiques lors [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-697","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/comments?post=697"}],"version-history":[{"count":16,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/697\/revisions"}],"predecessor-version":[{"id":1023,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/697\/revisions\/1023"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/media?parent=697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}