Use an instead-of trigger. : Trigger on View « Trigger « Oracle PL / SQL

Oracle PL / SQL
1. Aggregate Functions
2. Analytical Functions
3. Char Functions
4. Constraints
5. Conversion Functions
6. Cursor
7. Data Type
8. Date Timezone
9. Hierarchical Query
10. Index
11. Insert Delete Update
12. Large Objects
13. Numeric Math Functions
14. Object Oriented Database
15. PL SQL
16. Regular Expressions
17. Report Column Page
18. Result Set
19. Select Query
20. Sequence
21. SQL Plus
22. Stored Procedure Function
23. Subquery
24. System Packages
25. System Tables Views
26. Table
27. Table Joins
28. Trigger
29. User Previliege
30. View
31. XML
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Oracle PL / SQL » Trigger » Trigger on View 
Use an instead-of trigger.
 
SQL> CREATE TABLE rooms (
  2    room_id          NUMBER(5PRIMARY KEY,
  3    building         VARCHAR2(15),
  4    room_number      NUMBER(4),
  5    number_seats     NUMBER(4),
  6    description      VARCHAR2(50)
  7    );

Table created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20001'Building 7', 2011000'Large Lecture Hall');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20002'Building 6', 101500'Small Lecture Hall');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20003'Building 6', 15050'Discussion Room A');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20004'Building 6', 16050'Discussion Room B');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats,description)
  2             VALUES (20005'Building 6', 17050'Discussion Room C');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20006'Music Building', 10010'Music Practice Room');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20007'Music Building', 2001000'Concert Room');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats, description)
  2             VALUES (20008'Building 7', 30075'Discussion Room D');

row created.

SQL>
SQL> INSERT INTO rooms (room_id, building, room_number, number_seats,description)
  2             VALUES (20009'Building 7', 31050'Discussion Room E');

row created.

SQL>
SQL> CREATE TABLE session (
  2    department       CHAR(3),
  3    course           NUMBER(3),
  4    description      VARCHAR2(2000),
  5    max_lecturer     NUMBER(3),
  6    current_lecturer NUMBER(3),
  7    num_credits      NUMBER(1),
  8    room_id          NUMBER(5)
  9    );

Table created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('HIS', 101'History 101', 3011420000);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('HIS', 301'History 301', 300420004);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('CS', 101'Computer Science 101', 500420001);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('ECN', 203'Economics 203', 150320002);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('CS', 102'Computer Science 102', 353420003);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('MUS', 410'Music 410', 54320005);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('ECN', 101'Economics 101', 500420007);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('NUT', 307'Nutrition 307', 202420008);

row created.

SQL>
SQL> INSERT INTO session(department, course, description, max_lecturer, current_lecturer, num_credits, room_id)
  2              VALUES ('MUS', 100'Music 100', 10003, NULL);

row created.

SQL>
SQL>
SQL> CREATE OR REPLACE VIEW session_rooms AS
  2    SELECT department, course, building, room_number
  3    FROM rooms, session
  4    WHERE rooms.room_id = session.room_id;

View created.

SQL>
SQL> SELECT FROM session_rooms;

DEP     COURSE BUILDING        ROOM_NUMBER
--- ---------- --------------- -----------
HIS        301 Building 6              160
CS         101 Building 7              201
ECN        203 Building 6              101
CS         102 Building 6              150
MUS        410 Building 6              170
ECN        101 Music Building          200
NUT        307 Building 7              300

rows selected.

SQL>
SQL> CREATE TRIGGER sessionRoomsInsert
  2    INSTEAD OF INSERT ON session_rooms
  3  DECLARE
  4    v_roomID rooms.room_id%TYPE;
  5  BEGIN
  6    SELECT room_id
  7      INTO v_roomID
  8      FROM rooms
  9      WHERE building = :new.building
 10      AND room_number = :new.room_number;
 11
 12    UPDATE session
 13      SET room_id = v_roomID
 14      WHERE department = :new.department
 15      AND course = :new.course;
 16  END sessionRoomsInsert;
 17  /

Trigger created.

SQL>
SQL> INSERT INTO session_rooms (department, course, building, room_number)
  2    VALUES ('MUS', 100'Music Building', 200);

row created.

SQL>
SQL> SELECT FROM session_rooms;

DEP     COURSE BUILDING        ROOM_NUMBER
--- ---------- --------------- -----------
HIS        301 Building 6              160
CS         101 Building 7              201
ECN        203 Building 6              101
CS         102 Building 6              150
MUS        410 Building 6              170
ECN        101 Music Building          200
NUT        307 Building 7              300
MUS        100 Music Building          200

rows selected.

SQL>
SQL> drop view session_rooms;

View dropped.

SQL> drop table session;

Table dropped.

SQL> drop table rooms;

Table dropped.

SQL>

 
Related examples in the same category
1. Create trigger on a view
w__ww___.j___a_v__a__2___s.c_o_m___ | Contact Us
Copyright 2003 - 08 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.