{"id":201,"date":"2007-11-03T18:37:40","date_gmt":"2007-11-03T17:37:40","guid":{"rendered":"http:\/\/bar-solutions.com\/wordpress\/?p=201"},"modified":"2007-11-03T18:37:40","modified_gmt":"2007-11-03T17:37:40","slug":"oracle-11g-follows-in-trigger","status":"publish","type":"post","link":"https:\/\/blog.bar-solutions.com\/?p=201","title":{"rendered":"Oracle 11G &#8211; Follows in Trigger"},"content":{"rendered":"<p>I&#8217;ve seen a presentation on the 11G new features from Alex and Lucas at <a title=\"AMIS - Home\" href=\"http:\/\/www.amis.nl\" target=\"_blank\">Amis<\/a>. One of the questions posed there was when you are using the new <strong>follows<\/strong> option in triggers, what would happen if you have two triggers following the same one. A bit like the way it&#8221;s done right now.<\/p>\n<p><!--more--><\/p>\n<p>Suppose you have multiple trigger on the same event on the same table, for instance when you have a packaged application where you are not allowed to change any of the code. But you want to add your own code. Or you have some standard triggers that you generate using for example <a title=\"Quest CodeGen Utility Community\" href=\"http:\/\/codegen.inside.quest.com\/\" target=\"_blank\">CodeGen<\/a>.&nbsp;If you add a trigger to an event that already has a trigger on it, there is no way of knowing when&nbsp;this is executed, before or after the existing trigger. If you rely on values that may be changed in the first trigger there was no way to be sure this trigger had been fired before your code is executed.<\/p>\n<p>In Oracle 11G you now have the possibility to add the <strong>follows<\/strong> option to a trigger, to make sure the code is executed after the original trigger. (from the documentation at <a title=\"Create Trigger\" href=\"http:\/\/download.oracle.com\/docs\/cd\/B28359_01\/server.111\/b28286\/statements_7004.htm#SQLRF01405\" target=\"_blank\">Oracle<\/a>)<\/p>\n<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:594e32d2-6e9d-48a7-ab02-80d62a39e02e\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;;overflow: auto;\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #000000; \">CREATE [ OR REPLACE ] TRIGGER [schema.] trigger\n  { simple_dml_trigger\n  <\/span><span style=\"color: #000000; \">|<\/span><span style=\"color: #000000; \"> compound_dml_trigger\n  <\/span><span style=\"color: #000000; \">|<\/span><span style=\"color: #000000; \"> non_dml_trigger\n  }\n  [ FOLLOWS [schema.] trigger [[schema.] trigger]...]\n  [ ENABLE <\/span><span style=\"color: #000000; \">|<\/span><span style=\"color: #000000; \"> DISABLE ]\n  [ WHEN (condition) ]\n  trigger_body<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>When you add the <strong>FOLLOWS<\/strong> clause to your trigger, you can make sure it gets fired after the other trigger. But what happens if you have two (or more) triggers that follow a single trigger? One table with three triggers in place. Trigger 2 follows trigger 1 and trigger 3 follows trigger 1 too. Which one gets fired first? Is there any way of knowing? Someone once said that the on with the lowest physical number will be fired first? But how is this calculated? <\/p>\n<p>I have created a script to try these issues:<\/p>\n<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:43221df7-1203-4369-a351-b23dea49a0f0\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 499px; padding-top: 0px\">\n<pre style=\"background-color:White;;overflow: auto;;font-family:Microsoft Sans Serif;font-size:9.75\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">SET<\/span><span style=\"color: #000000; \"> FEEDBACK OFF\nprompt <\/span><span style=\"color: #0000FF; \">Create<\/span><span style=\"color: #000000; \"> a <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">CREATE<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> T_TRIGGERTEST\n(\n  ID    <\/span><span style=\"color: #0000FF; \">NUMBER<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">not<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \">,\n  <\/span><span style=\"color: #0000FF; \">VALUE<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">VARCHAR2<\/span><span style=\"color: #000000; \">(<\/span><span style=\"color: #800080; \">200<\/span><span style=\"color: #000000; \">)\n)\ntablespace USERS;\n<\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> Create\/Recreate primary, unique and foreign key constraints <\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #0000FF; \">alter<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> T_TRIGGERTEST\n  add <\/span><span style=\"color: #0000FF; \">constraint<\/span><span style=\"color: #000000; \"> PK_ID primary key (ID);\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> a sequence...\n<\/span><span style=\"color: #0000FF; \">CREATE<\/span><span style=\"color: #000000; \"> SEQUENCE t_triggertest_seq <\/span><span style=\"color: #0000FF; \">START<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">WITH<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> NOCACHE;\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">row<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  :new.id :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> t_triggertest_seq.nextval;\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_1<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ROW<\/span><span style=\"color: #000000; \">\n  follows tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">begin<\/span><span style=\"color: #000000; \">\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_2<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ROW<\/span><span style=\"color: #000000; \">\n  follows tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">begin<\/span><span style=\"color: #000000; \">\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_3<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> a <\/span><span style=\"color: #0000FF; \">record<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">into<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INTO<\/span><span style=\"color: #000000; \"> t_triggertest (<\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #0000FF; \">VALUES<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">value<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">);\nprompt query <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">to<\/span><span style=\"color: #000000; \"> see <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">values<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">SELECT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">FROM<\/span><span style=\"color: #000000; \"> t_triggertest;\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \"> again...\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ROW<\/span><span style=\"color: #000000; \">\n  follows tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">begin<\/span><span style=\"color: #000000; \">\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_2<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> another <\/span><span style=\"color: #0000FF; \">record<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INTO<\/span><span style=\"color: #000000; \"> t_triggertest (<\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #0000FF; \">VALUES<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">value<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">);\nprompt query <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">to<\/span><span style=\"color: #000000; \"> see <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">values<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">SELECT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">FROM<\/span><span style=\"color: #000000; \"> t_triggertest;\nprompt drop <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">...\nDROP <\/span><span style=\"color: #0000FF; \">TRIGGER<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\nprompt <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> another <\/span><span style=\"color: #0000FF; \">record<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INTO<\/span><span style=\"color: #000000; \"> t_triggertest (<\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #0000FF; \">VALUES<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">value<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">);\nprompt query <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">to<\/span><span style=\"color: #000000; \"> see <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">values<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">SELECT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">FROM<\/span><span style=\"color: #000000; \"> t_triggertest;\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> again...\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ROW<\/span><span style=\"color: #000000; \">\n  follows tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">begin<\/span><span style=\"color: #000000; \">\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_3<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> another <\/span><span style=\"color: #0000FF; \">record<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INTO<\/span><span style=\"color: #000000; \"> t_triggertest (<\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #0000FF; \">VALUES<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">value<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">);\nprompt query <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">to<\/span><span style=\"color: #000000; \"> see <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">values<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">SELECT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">FROM<\/span><span style=\"color: #000000; \"> t_triggertest;\nprompt <\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> again, but this <\/span><span style=\"color: #0000FF; \">time<\/span><span style=\"color: #000000; \"> it follows <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">create<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">or<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">replace<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">trigger<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">before<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \"> t_triggertest  \n  <\/span><span style=\"color: #0000FF; \">for<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">each<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ROW<\/span><span style=\"color: #000000; \">\n  follows tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">begin<\/span><span style=\"color: #000000; \">\n  :new.value :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> :new.value || <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \"> tr_triggertest_3<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">end<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\nprompt <\/span><span style=\"color: #0000FF; \">insert<\/span><span style=\"color: #000000; \"> another <\/span><span style=\"color: #0000FF; \">record<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INTO<\/span><span style=\"color: #000000; \"> t_triggertest (<\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #0000FF; \">VALUES<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">value<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">);\nprompt query <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">to<\/span><span style=\"color: #000000; \"> see <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">values<\/span><span style=\"color: #000000; \">...\n<\/span><span style=\"color: #0000FF; \">SELECT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">FROM<\/span><span style=\"color: #000000; \"> t_triggertest;\nprompt clean up, drop <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">table<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">and<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">the<\/span><span style=\"color: #000000; \"> sequence...\nDROP <\/span><span style=\"color: #0000FF; \">TABLE<\/span><span style=\"color: #000000; \"> t_triggertest;\nDROP SEQUENCE t_triggertest_seq;\n\noutput (partially)\nID <\/span><span style=\"color: #0000FF; \">VALUE<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> <\/span><span style=\"color: #008000; \">--------------------------------------------------------------------------------\n<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n <\/span><span style=\"color: #800080; \">4<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">\n <\/span><span style=\"color: #800080; \">5<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">value<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \"> tr_triggertest_<\/span><span style=\"color: #800080; \">3<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>When I check the output it appears that trigger 3 gets fired before trigger 2 no matter when it&#8217;s created except when I tell it to fire following trigger 2. I am guessing you can get some other results on your installation of Oracle 11G, but I think this shows that you cannot rely on the order of triggers being fired, except when you tell the triggers to follow eachother,<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve seen a presentation on the 11G new features from Alex and Lucas at Amis. One of the questions posed there was when you are using the new follows option in triggers, what would happen if you have two triggers following the same one. A bit like the way it&#8221;s done right now.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5,9],"tags":[],"class_list":["post-201","post","type-post","status-publish","format-standard","hentry","category-oracle","category-plsql","category-sql"],"_links":{"self":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":0,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}