<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FTrigger%2FBusiness_Logic_Trigger</id>
		<title>Oracle PL/SQL/Trigger/Business Logic Trigger - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FTrigger%2FBusiness_Logic_Trigger"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Trigger/Business_Logic_Trigger&amp;action=history"/>
		<updated>2026-05-25T16:27:51Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Trigger/Business_Logic_Trigger&amp;diff=1635&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Trigger/Business_Logic_Trigger&amp;diff=1635&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Trigger/Business_Logic_Trigger&amp;diff=1636&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Trigger/Business_Logic_Trigger&amp;diff=1636&amp;oldid=prev"/>
				<updated>2010-05-26T09:58:29Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A trigger restricting updates==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; -- create demo table&lt;br /&gt;
SQL&amp;gt; create table Employee(&lt;br /&gt;
  2    ID                 VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3    First_Name         VARCHAR2(10 BYTE),&lt;br /&gt;
  4    Last_Name          VARCHAR2(10 BYTE),&lt;br /&gt;
  5    Start_Date         DATE,&lt;br /&gt;
  6    End_Date           DATE,&lt;br /&gt;
  7    Salary             Number(8,2),&lt;br /&gt;
  8    City               VARCHAR2(10 BYTE),&lt;br /&gt;
  9    Description        VARCHAR2(15 BYTE)&lt;br /&gt;
 10  )&lt;br /&gt;
 11  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- prepare data&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2               values (&amp;quot;01&amp;quot;,&amp;quot;Jason&amp;quot;,    &amp;quot;Martin&amp;quot;,  to_date(&amp;quot;19960725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20060725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1234.56, &amp;quot;Toronto&amp;quot;,  &amp;quot;Programmer&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;02&amp;quot;,&amp;quot;Alison&amp;quot;,   &amp;quot;Mathews&amp;quot;, to_date(&amp;quot;19760321&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19860221&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6661.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;03&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Smith&amp;quot;,   to_date(&amp;quot;19781212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19900315&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6544.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;04&amp;quot;,&amp;quot;Celia&amp;quot;,    &amp;quot;Rice&amp;quot;,    to_date(&amp;quot;19821024&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19990421&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2344.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;05&amp;quot;,&amp;quot;Robert&amp;quot;,   &amp;quot;Black&amp;quot;,   to_date(&amp;quot;19840115&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980808&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;06&amp;quot;,&amp;quot;Linda&amp;quot;,    &amp;quot;Green&amp;quot;,   to_date(&amp;quot;19870730&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19960104&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 4322.78,&amp;quot;New York&amp;quot;,  &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;07&amp;quot;,&amp;quot;David&amp;quot;,    &amp;quot;Larry&amp;quot;,   to_date(&amp;quot;19901231&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 7897.78,&amp;quot;New York&amp;quot;,  &amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;08&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Cat&amp;quot;,     to_date(&amp;quot;19960917&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20020415&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1232.78,&amp;quot;Vancouver&amp;quot;, &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- display data in the table&lt;br /&gt;
SQL&amp;gt; select * from Employee&lt;br /&gt;
  2  /&lt;br /&gt;
ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- ---------- ---------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester&lt;br /&gt;
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester&lt;br /&gt;
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager&lt;br /&gt;
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester&lt;br /&gt;
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager&lt;br /&gt;
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --  A trigger restricting updates.&lt;br /&gt;
SQL&amp;gt; -- This trigger allows changes to employee records&lt;br /&gt;
SQL&amp;gt; -- only on Mondays through Fridays, and only during&lt;br /&gt;
SQL&amp;gt; -- the hours of 8:00am to 5:00pm.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;     CREATE OR REPLACE TRIGGER only_during_business_hours&lt;br /&gt;
  2         BEFORE INSERT OR UPDATE OR DELETE ON employee&lt;br /&gt;
  3      BEGIN&lt;br /&gt;
  4         IF  TO_NUMBER(TO_CHAR(SYSDATE,&amp;quot;hh24&amp;quot;)) &amp;lt; 8 -- nothing before 8:00am&lt;br /&gt;
  5             OR TO_NUMBER(TO_CHAR(SYSDATE,&amp;quot;hh24&amp;quot;)) &amp;gt;= 5&lt;br /&gt;
  6                -- changes must be made BEFORE 5:00pm&lt;br /&gt;
  7              OR TO_CHAR(SYSDATE,&amp;quot;dy&amp;quot;) in (&amp;quot;sun&amp;quot;,&amp;quot;sat&amp;quot;) THEN -- nothing on weekends&lt;br /&gt;
  8      RAISE_APPLICATION_ERROR (-20000, &amp;quot;Employee changes only allowed during business hours.&amp;quot;);&lt;br /&gt;
  9      END IF;&lt;br /&gt;
 10      END;&lt;br /&gt;
 11      /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; update employee set first_name = &amp;quot;asdf&amp;quot;;&lt;br /&gt;
update employee set first_name = &amp;quot;asdf&amp;quot;&lt;br /&gt;
       *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20000: Employee changes only allowed during business hours.&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.ONLY_DURING_BUSINESS_HOURS&amp;quot;, line 6&lt;br /&gt;
ORA-04088: error during execution of trigger &amp;quot;sqle.ONLY_DURING_BUSINESS_HOURS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from employee;&lt;br /&gt;
ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- ---------- ---------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester&lt;br /&gt;
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester&lt;br /&gt;
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager&lt;br /&gt;
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester&lt;br /&gt;
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager&lt;br /&gt;
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- clean the table&lt;br /&gt;
SQL&amp;gt; drop table Employee&lt;br /&gt;
  2  /&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==A Trigger to check the available room==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE place (&lt;br /&gt;
  2    room_id          NUMBER(5) PRIMARY KEY,&lt;br /&gt;
  3    building         VARCHAR2(15),&lt;br /&gt;
  4    room_number      NUMBER(4),&lt;br /&gt;
  5    number_seats     NUMBER(4),&lt;br /&gt;
  6    description      VARCHAR2(50)&lt;br /&gt;
  7    );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20001, &amp;quot;Building 7&amp;quot;, 201, 1000, &amp;quot;Large Lecture Hall&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20002, &amp;quot;Building 6&amp;quot;, 101, 500, &amp;quot;Small Lecture Hall&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20003, &amp;quot;Building 6&amp;quot;, 150, 50, &amp;quot;Discussion Room A&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20004, &amp;quot;Building 6&amp;quot;, 160, 50, &amp;quot;Discussion Room B&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats,description)&lt;br /&gt;
  2             VALUES (20005, &amp;quot;Building 6&amp;quot;, 170, 50, &amp;quot;Discussion Room C&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20006, &amp;quot;Music Building&amp;quot;, 100, 10, &amp;quot;Music Practice Room&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20007, &amp;quot;Music Building&amp;quot;, 200, 1000, &amp;quot;Concert Room&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats, description)&lt;br /&gt;
  2             VALUES (20008, &amp;quot;Building 7&amp;quot;, 300, 75, &amp;quot;Discussion Room D&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO place (room_id, building, room_number, number_seats,description)&lt;br /&gt;
  2             VALUES (20009, &amp;quot;Building 7&amp;quot;, 310, 50, &amp;quot;Discussion Room E&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; CREATE TABLE session (&lt;br /&gt;
  2    department       CHAR(3),&lt;br /&gt;
  3    course           NUMBER(3),&lt;br /&gt;
  4    description      VARCHAR2(2000),&lt;br /&gt;
  5    max_lecturer     NUMBER(3),&lt;br /&gt;
  6    current_lecturer NUMBER(3),&lt;br /&gt;
  7    num_credits      NUMBER(1),&lt;br /&gt;
  8    room_id          NUMBER(5)&lt;br /&gt;
  9    );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER CheckRoomID&lt;br /&gt;
  2    BEFORE INSERT OR UPDATE OF room_id&lt;br /&gt;
  3    ON session&lt;br /&gt;
  4    FOR EACH ROW&lt;br /&gt;
  5  DECLARE&lt;br /&gt;
  6    v_RoomID  NUMBER(5);&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    SELECT room_id&lt;br /&gt;
  9      into v_RoomID&lt;br /&gt;
 10      FROM place&lt;br /&gt;
 11      where room_id = :new.room_id;&lt;br /&gt;
 12  EXCEPTION&lt;br /&gt;
 13    WHEN NO_DATA_FOUND THEN&lt;br /&gt;
 14      RAISE_APPLICATION_ERROR(-20000, :new.room_id || &amp;quot; is not a &amp;quot; ||&lt;br /&gt;
 15          &amp;quot; valid room&amp;quot;);&lt;br /&gt;
 16  END CheckRoomID;&lt;br /&gt;
 17  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;HIS&amp;quot;, 101, &amp;quot;History 101&amp;quot;, 30, 11, 4, 20000);&lt;br /&gt;
INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
            *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20000: 20000 is not a  valid room&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.CHECKROOMID&amp;quot;, line 10&lt;br /&gt;
ORA-04088: error during execution of trigger &amp;quot;sqle.CHECKROOMID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;HIS&amp;quot;, 301, &amp;quot;History 301&amp;quot;, 30, 0, 4, 20004);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;CS&amp;quot;, 101, &amp;quot;Computer Science 101&amp;quot;, 50, 0, 4, 20001);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;ECN&amp;quot;, 203, &amp;quot;Economics 203&amp;quot;, 15, 0, 3, 20002);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;CS&amp;quot;, 102, &amp;quot;Computer Science 102&amp;quot;, 35, 3, 4, 20003);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;MUS&amp;quot;, 410, &amp;quot;Music 410&amp;quot;, 5, 4, 3, 20005);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;ECN&amp;quot;, 101, &amp;quot;Economics 101&amp;quot;, 50, 0, 4, 20007);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;NUT&amp;quot;, 307, &amp;quot;Nutrition 307&amp;quot;, 20, 2, 4, 20008);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
  2              VALUES (&amp;quot;MUS&amp;quot;, 100, &amp;quot;Music 100&amp;quot;, 100, 0, 3, NULL);&lt;br /&gt;
INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)&lt;br /&gt;
            *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20000:  is not a  valid room&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.CHECKROOMID&amp;quot;, line 10&lt;br /&gt;
ORA-04088: error during execution of trigger &amp;quot;sqle.CHECKROOMID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table session;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table place;&lt;br /&gt;
Table dropped.&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Define trigger to force all department names to uppercase==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (10, &amp;quot;ACCOUNTING&amp;quot;, &amp;quot;NEW YORK&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (20, &amp;quot;RESEARCH&amp;quot;, &amp;quot;DALLAS&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (30, &amp;quot;SALES&amp;quot;, &amp;quot;CHICAGO&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (40, &amp;quot;OPERATIONS&amp;quot;, &amp;quot;BOSTON&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- Example of a trigger.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER department_insert_update&lt;br /&gt;
  2  BEFORE INSERT OR UPDATE ON dept&lt;br /&gt;
  3         FOR EACH ROW&lt;br /&gt;
  4  DECLARE&lt;br /&gt;
  5     dup_flag  INTEGER;&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7     --Force all department names to uppercase.&lt;br /&gt;
  8      :NEW.dname := UPPER(:NEW.dname);&lt;br /&gt;
  9  END;&lt;br /&gt;
 10   /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --  Testing the department_insert_update trigger.&lt;br /&gt;
SQL&amp;gt;  INSERT INTO dept (deptno, dname) VALUES (10,&amp;quot;payroll&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  INSERT INTO dept (deptno, dname) VALUES (11,&amp;quot;Sewage&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  UPDATE dept SET dname = &amp;quot;Payroll&amp;quot; WHERE deptno = 10;&lt;br /&gt;
2 rows updated.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  SELECT deptno, dname FROM dept WHERE deptno BETWEEN 10 AND 11;&lt;br /&gt;
    DEPTNO DNAME&lt;br /&gt;
---------- --------------&lt;br /&gt;
        10 PAYROLL&lt;br /&gt;
        10 PAYROLL&lt;br /&gt;
        11 SEWAGE&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table dept;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Force all department names to uppercase in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table department&lt;br /&gt;
  2  ( dept_id       number(2),&lt;br /&gt;
  3    dept_name     varchar2(14),&lt;br /&gt;
  4    no_of_emps    varchar2(13)&lt;br /&gt;
  5  )&lt;br /&gt;
  6  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;     CREATE OR REPLACE TRIGGER department_insert_update&lt;br /&gt;
  2        BEFORE INSERT OR UPDATE ON department&lt;br /&gt;
  3        FOR EACH ROW&lt;br /&gt;
  4      DECLARE&lt;br /&gt;
  5        dup_flag  INTEGER;&lt;br /&gt;
  6      BEGIN&lt;br /&gt;
  7&lt;br /&gt;
  8      :NEW.dept_name := UPPER(:NEW.dept_name);&lt;br /&gt;
  9      END;&lt;br /&gt;
 10     /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO department VALUES (10, &amp;quot;a&amp;quot;, &amp;quot;NEW YORK&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO department VALUES (20, &amp;quot;b&amp;quot;,   &amp;quot;DALLAS&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO department VALUES (30, &amp;quot;SALES&amp;quot;,      &amp;quot;CHICAGO&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO department VALUES (40, &amp;quot;OPERATIONS&amp;quot;, &amp;quot;BOSTON&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from department;&lt;br /&gt;
   DEPT_ID DEPT_NAME      NO_OF_EMPS&lt;br /&gt;
---------- -------------- -------------&lt;br /&gt;
        10 A              NEW YORK&lt;br /&gt;
        20 B              DALLAS&lt;br /&gt;
        30 SALES          CHICAGO&lt;br /&gt;
        40 OPERATIONS     BOSTON&lt;br /&gt;
4 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table department;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trigger to check inserting value==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt; --&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set echo on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table t1 ( x int primary key, y int );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; create table t2 (col1 int references t1, col2 int check (col2&amp;gt;0));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; create index t2_idx on t2(col2,col1);&lt;br /&gt;
Index created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create trigger t2_trigger before insert or update of col1, col2 on t2 for each row&lt;br /&gt;
  2    begin&lt;br /&gt;
  3        if ( :new.col1 &amp;lt; :new.col2 ) then&lt;br /&gt;
  4           raise_application_error(-20001,&amp;quot;Invalid Operation Col1 cannot be less then Col2&amp;quot;);&lt;br /&gt;
  5        end if;&lt;br /&gt;
  6    end;&lt;br /&gt;
  7  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into t2(col1, col2) values(1,2);&lt;br /&gt;
insert into t2(col1, col2) values(1,2)&lt;br /&gt;
            *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20001: Invalid Operation Col1 cannot be less&lt;br /&gt;
then Col2&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.T2_TRIGGER&amp;quot;, line 3&lt;br /&gt;
ORA-04088: error during execution of trigger&lt;br /&gt;
&amp;quot;sqle.T2_TRIGGER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; insert into t2(col1, col2) values(2,1);&lt;br /&gt;
insert into t2(col1, col2) values(2,1)&lt;br /&gt;
*&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-02291: integrity constraint&lt;br /&gt;
(sqle.SYS_C006395) violated - parent key not&lt;br /&gt;
found&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table t1 cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table t2 cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trigger to check the employee count per department==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt; &lt;br /&gt;
SQL&amp;gt; CREATE TABLE employee(&lt;br /&gt;
  2           emp_id           INTEGER,&lt;br /&gt;
  3           emp_name         VARCHAR2(32),&lt;br /&gt;
  4           supervised_by    INTEGER,&lt;br /&gt;
  5           pay_rate         NUMBER(9,2),&lt;br /&gt;
  6           pay_type         CHAR);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; CREATE TABLE department&lt;br /&gt;
  2         (dept_id           INTEGER,&lt;br /&gt;
  3          dept_name         VARCHAR2(32));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; ALTER TABLE department&lt;br /&gt;
  2  ADD CONSTRAINT pk_dept PRIMARY KEY (dept_id);&lt;br /&gt;
Table altered.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE emp_dept (emp_id INTEGER, dept_id INTEGER, CONSTRAINT unq_1 unique (emp_id, dept_id));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;     CREATE OR REPLACE TRIGGER only_two_departments&lt;br /&gt;
  2        BEFORE UPDATE OR INSERT ON emp_dept&lt;br /&gt;
  3        FOR EACH ROW&lt;br /&gt;
  4      DECLARE&lt;br /&gt;
  5        dept_count  INTEGER;      --# of depts for this employee&lt;br /&gt;
  6        max_depts   INTEGER := 2; --max number of depts per employee.&lt;br /&gt;
  7      BEGIN&lt;br /&gt;
  8        SELECT COUNT(*) INTO dept_count&lt;br /&gt;
  9         FROM emp_dept&lt;br /&gt;
 10        WHERE emp_id = :NEW.emp_id;&lt;br /&gt;
 11&lt;br /&gt;
 12       IF :OLD.emp_id = :NEW.emp_id THEN&lt;br /&gt;
 13         RETURN;&lt;br /&gt;
 14       ELSE&lt;br /&gt;
 15         IF dept_count &amp;gt;= max_depts THEN&lt;br /&gt;
 16           RAISE_APPLICATION_ERROR (-20000,&amp;quot;Employees are limited to a max of two departments.&amp;quot;);&lt;br /&gt;
 17     END IF;&lt;br /&gt;
 18       END IF;&lt;br /&gt;
 19     END;&lt;br /&gt;
 20     /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;     INSERT INTO employee (emp_id,emp_name) VALUES (401,&amp;quot;Harvey Wallbanger&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO employee (emp_id,emp_name) VALUES (402,&amp;quot;Scarlet Tanninger&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO department (dept_id, dept_name) VALUES (401,&amp;quot;Fermentation&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO department (dept_id, dept_name) VALUES (402,&amp;quot;Distillation&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO department (dept_id, dept_name) VALUES (403,&amp;quot;Bottling&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO emp_dept (emp_id, dept_id) VALUES (401,401);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO emp_dept (emp_id, dept_id) VALUES (401,402);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO emp_dept (emp_id, dept_id) VALUES (402,402);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO emp_dept (emp_id, dept_id) VALUES (402,403);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;     INSERT INTO emp_dept (emp_id, dept_id) VALUES (401,403);&lt;br /&gt;
    INSERT INTO emp_dept (emp_id, dept_id) VALUES (401,403)&lt;br /&gt;
                *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20000: Employees are limited to a max of two&lt;br /&gt;
departments.&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.ONLY_TWO_DEPARTMENTS&amp;quot;, line&lt;br /&gt;
13&lt;br /&gt;
ORA-04088: error during execution of trigger&lt;br /&gt;
&amp;quot;sqle.ONLY_TWO_DEPARTMENTS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;     UPDATE emp_dept SET dept_id = 403 WHERE emp_id = 401 AND dept_id = 402;&lt;br /&gt;
    UPDATE emp_dept SET dept_id = 403 WHERE emp_id = 401 AND dept_id = 402&lt;br /&gt;
           *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-04091: table sqle.EMP_DEPT is mutating,&lt;br /&gt;
trigger/function may not see it&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.ONLY_TWO_DEPARTMENTS&amp;quot;, line&lt;br /&gt;
5&lt;br /&gt;
ORA-04088: error during execution of trigger&lt;br /&gt;
&amp;quot;sqle.ONLY_TWO_DEPARTMENTS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table employee cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table department cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table emp_dept cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; --&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>