{"id":239,"date":"2008-05-01T08:07:30","date_gmt":"2008-05-01T07:07:30","guid":{"rendered":"http:\/\/bar-solutions.com\/wordpress\/?p=239"},"modified":"2008-05-01T08:07:30","modified_gmt":"2008-05-01T07:07:30","slug":"triggers","status":"publish","type":"post","link":"https:\/\/blog.bar-solutions.com\/?p=239","title":{"rendered":"Triggers&#8230;"},"content":{"rendered":"<p>I ran into an issue at a customer site where certain triggers were disabled in the database where they should be enabled. It appeared that an update script, that is run every night, first disables all triggers on a couple of tables. Then does what it needs to do, without the overhead of the trigger code. and then, when it&#8217;s done, it enables all triggers again.<\/p>\n<p>If the update code fails for whatever reason, then the re-enabling of the triggers is not performed, leaving the triggers in disabled state on the database, which can cause problems in everyday use. What you would actually want is a situation where you can disable the triggers, but just for the current session. Any other session should have the triggers enabled at all times. Unfortunately <a title=\"Oracle 11g, Siebel, PeopleSoft | Oracle, The World's Largest Enterprise Software Company\" href=\"http:\/\/www.oracle.com\/\" target=\"_blank\" rel=\"nofollow\">Oracle<\/a> doesn&#8217;t support this kind of enabling\/disabling of triggers. We do however have access to all the possibilities of PL\/SQL in triggers so we can build a solution to this problem ourselves.<\/p>\n<p><!--more--><\/p>\n<p>I have come up with a semaphore package which allows me to set and clear a flag or semaphore which I can then check in the trigger code and then, depending on the value of this semaphore execute or skip the code in the trigger. I have also used the knowledge I posted <a title=\"A boolean property that's really an integer.\" href=\"http:\/\/bar-solutions.com\/wordpress\/?p=91\" target=\"_blank\" rel=\"nofollow\">here<\/a> about a boolean that&#8217;s really an integer.<\/p>\n<p>The package<\/p>\n<div class=\"wlWriterSmartContent\" id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:a1a6a29e-57f1-4540-9b61-a8083a0369be\" 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: #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; \">PACKAGE<\/span><span style=\"color: #000000; \"> bar_semaphore\n<\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> Author  : Patrick Barel<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> Public function and procedure declarations<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #000000; \">  <\/span><span style=\"color: #0000FF; \">FUNCTION<\/span><span style=\"color: #000000; \"> sem_emp\n    <\/span><span style=\"color: #0000FF; \">RETURN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">BOOLEAN<\/span><span style=\"color: #000000; \">;\n\n  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> set_sem_emp;\n\n  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> clr_sem_emp;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> bar_semaphore;\n<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p><\/p>\n<div class=\"wlWriterSmartContent\" id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:b5f5a953-5041-4e0c-8761-bfe400f79195\" 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: #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; \">PACKAGE<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">BODY<\/span><span style=\"color: #000000; \"> bar_semaphore\n<\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> Private variable declarations<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #000000; \">  g_emp                                    <\/span><span style=\"color: #0000FF; \">PLS_INTEGER<\/span><span style=\"color: #000000; \">;\n\n  <\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> Function and procedure implementations<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #000000; \">  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> MINVALUE(\n    p_variable_in_out              <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">OUT<\/span><span style=\"color: #000000; \">  <\/span><span style=\"color: #0000FF; \">PLS_INTEGER<\/span><span style=\"color: #000000; \">\n  , p_min_value_in                 <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \">      <\/span><span style=\"color: #0000FF; \">PLS_INTEGER<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">DEFAULT<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \"> )\n  <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> p_variable_in_out <\/span><span style=\"color: #000000; \">&lt;<\/span><span style=\"color: #000000; \"> p_min_value_in <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n      p_variable_in_out   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> p_min_value_in;\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> MINVALUE;\n\n  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> initialization\n  <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    g_emp   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> initialization;\n\n  <\/span><span style=\"color: #0000FF; \">FUNCTION<\/span><span style=\"color: #000000; \"> sem_emp\n    <\/span><span style=\"color: #0000FF; \">RETURN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">BOOLEAN<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">RETURN<\/span><span style=\"color: #000000; \">( g_emp <\/span><span style=\"color: #000000; \">&gt;<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \"> );\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> sem_emp;\n\n  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> set_sem_emp\n  <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    g_emp   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> g_emp <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> set_sem_emp;\n\n  <\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> clr_sem_emp\n  <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    g_emp   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> g_emp <\/span><span style=\"color: #000000; \">-<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n    MINVALUE( g_emp, <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \"> );\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> clr_sem_emp;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  initialization;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> bar_semaphore;\n<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>The triggers<\/p>\n<div class=\"wlWriterSmartContent\" id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:399867b6-d6d4-424a-8b10-8984fe708749\" 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: #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_emp_bri\n  <\/span><span style=\"color: #0000FF; \">BEFORE<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">ON<\/span><span style=\"color: #000000; \"> emp\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; \">DECLARE<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> local variables here<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">NOT<\/span><span style=\"color: #000000; \">( bar_semaphore.sem_emp ) <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> :NEW.ename <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">NULL<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n      :NEW.ename   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">&lt;EMPTY&gt;<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> tr_emp_bri;<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p><\/p>\n<div class=\"wlWriterSmartContent\" id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:030d55ab-34f5-4848-a925-713770c35168\" 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: #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_emp_bru\n  <\/span><span style=\"color: #0000FF; \">BEFORE<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">UPDATE<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">ON<\/span><span style=\"color: #000000; \"> emp\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; \">DECLARE<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #008000; \">--<\/span><span style=\"color: #008000; \"> local variables here<\/span><span style=\"color: #008000; \">\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">NOT<\/span><span style=\"color: #000000; \">( bar_semaphore.sem_emp ) <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> :NEW.ename <\/span><span style=\"color: #0000FF; \">IS<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">NULL<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n      :NEW.ename   :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #800000; \">&lt;EMPTY&gt;<\/span><span style=\"color: #800000; \">'<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> tr_emp_bru;<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>The script<\/p>\n<div class=\"wlWriterSmartContent\" id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:36293104-91c2-40a0-a6c8-64071fcbf425\" 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; \">clear screen\n<\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> serveroutput <\/span><span style=\"color: #0000FF; \">on<\/span><span style=\"color: #000000; \">\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">update<\/span><span style=\"color: #000000; \"> emp <\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> ename <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">where<\/span><span style=\"color: #000000; \"> empno <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">7934<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">rollback<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">exec<\/span><span style=\"color: #000000; \"> bar_semaphore.set_sem_emp;\n<\/span><span style=\"color: #0000FF; \">update<\/span><span style=\"color: #000000; \"> emp <\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> ename <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">where<\/span><span style=\"color: #000000; \"> empno <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">7934<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">rollback<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">exec<\/span><span style=\"color: #000000; \"> bar_semaphore.clr_sem_emp;\n<\/span><span style=\"color: #0000FF; \">update<\/span><span style=\"color: #000000; \"> emp <\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> ename <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">where<\/span><span style=\"color: #000000; \"> empno <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">7934<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">rollback<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">exec<\/span><span style=\"color: #000000; \"> bar_semaphore.set_sem_emp;\n<\/span><span style=\"color: #0000FF; \">update<\/span><span style=\"color: #000000; \"> emp <\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> ename <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">where<\/span><span style=\"color: #000000; \"> empno <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">7934<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">rollback<\/span><span style=\"color: #000000; \">;\nconnect scott<\/span><span style=\"color: #808080; \">\/<\/span><span style=\"color: #000000; \">tiger\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;\n<\/span><span style=\"color: #0000FF; \">update<\/span><span style=\"color: #000000; \"> emp <\/span><span style=\"color: #0000FF; \">set<\/span><span style=\"color: #000000; \"> ename <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">null<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">where<\/span><span style=\"color: #000000; \"> empno <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">7934<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">select<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">from<\/span><span style=\"color: #000000; \"> emp;<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>The output of the script shows that when a new session is connected and the semaphore is set in the other session, disabling the triggers, this has no influence on the currently connected session. It is as if the semaphore is never set and the triggers function as normal. This way the triggers can be turned off for certain scripts, or pieces of code, that don&#8217;t want to be bothered by the code in the trigger, while other session still have this code in place and still have it turned on.<\/p>\n<p>You can either choose to have a single semaphore in a package, or a single semaphore for every table or even a semaphores for different functions in the code. This way execution can be turned off and on exactly the way you want it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I ran into an issue at a customer site where certain triggers were disabled in the database where they should be enabled. It appeared that an update script, that is run every night, first disables all triggers on a couple of tables. Then does what it needs to do, without the overhead of the trigger [&hellip;]<\/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-239","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\/239","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=239"}],"version-history":[{"count":0,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/239\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}