Oracle Instead of Trigger的用法
Oracle Instead of Trigger的用法
1. instead of trigger 是基於檢視建立的,不能建在表上,為什麼要建在檢視上,一般的檢視如果其資料來源一個表並且包含該表的主鍵,就可以對檢視進行DML操作.另外一種情況是從多個表查詢出來的.這樣我們就不能對檢視進行操作了,也就是隻能查詢.instead of trigger可以解決建在多表上檢視的更新操作.
2.下面我們就來例項操作:
a.先建表,簡單點就三個分別是學生表,課程表,學生選課表
CREATE TABLE STUDENT
(
CODE VARCHAR2(5),
LNAME VARCHAR2(200)
)
CREATE TABLE COURSE
(
CODE VARCHAR2(5),
CNAME VARCHAR2(30)
)
CREATE TABLE ST_CR
(
STUDENT VARCHAR2(5),
COURSE VARCHAR2(5),
GRADE NUMBER
)
--表的約束
ALTER TABLE STUDENT ADD CONSTRAINT STUDENT$PK PRIMARY KEY(CODE);
ALTER TABLE COURSE ADD CONSTRAINT COURSE$PK PRIMARY KEY(CODE);
ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$PK PRIMARY KEY(STUDENT, COURSE);
ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$STUDENT FOREIGN KEY(STUDENT) REFERENCES STUDENT(CODE);
ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$COURSE FOREIGN KEY(COURSE) REFERENCES COURSE(CODE);
b.基於這三個表的檢視
CREATE OR REPLACE VIEW STUDENT_STATUS AS
SELECT S.CODE S_CODE, S.LNAME STUDENT, C.CODE C_CODE, C.CNAME COURSE, SC.GRADE GRADE
FROM STUDENT S, COURSE C, ST_CR SC
WHERE S.CODE = SC.STUDENT
AND C.CODE = SC.COURSE
c.基於檢視的觸發器
CREATE OR REPLACE TRIGGER TRI_STCR INSTEAD OF INSERT ON STUDENT_STATUS
FOR EACH ROW
DECLARE
W_ACTION VARCHAR2(1);
BEGIN
IF INSERTING THEN
W_ACTION := 'I';
ELSE
RAISE PROGRAM_ERROR;
END IF;
INSERT INTO STUDENT(CODE, LNAME) VALUES(:NEW.S_CODE,:NEW.STUDENT);
INSERT INTO COURSE(CODE, CNAME) VALUES(:NEW.C_CODE, :NEW.COURSE);
INSERT INTO ST_CR(STUDENT, COURSE, GRADE)
VALUES(:NEW.S_CODE, :NEW.C_CODE, :NEW.GRADE);
END;
d.對檢視執行資料插入
INSERT INTO STUDENT_STATUS(S_CODE, STUDENT, C_CODE, COURSE, GRADE)
VALUES('001','Mike','EN','English',86);
可以看到每個表各有一條資料已經插入.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9606200/viewspace-745691/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Instead of 觸發器的使用Oracle觸發器
- ±±oracle trigger±±Oracle
- Test Oracle triggerOracle
- Oracle trigger問題Oracle
- oracle trigger 同步資料Oracle
- 禁止oracle表的觸發器triggerOracle觸發器
- Oracle Hints的用法Oracle
- oracle job的用法Oracle
- Oracle keep的用法Oracle
- Oracle Analyze的用法Oracle
- Oracle中with的用法Oracle
- Oracle Hint的用法Oracle
- oracle trigger語法小記(一)Oracle
- oracle trigger觸發器這servererrorOracle觸發器ServerError
- Oracle logon trigger舉例OracleGo
- Oracle的Cast的用法OracleAST
- ORACLE WITH AS 用法Oracle
- oracle comment on的用法Oracle
- oracle explain plan for的用法OracleAI
- 【 Oracle中rownum的用法 】Oracle
- Oracle set unused的用法Oracle
- oracle的interval用法特例Oracle
- Oracle 的 bulk collect用法Oracle
- (轉)Oracle Hint的用法Oracle
- Oracle 中 case的用法Oracle
- oracle樹中prior的用法Oracle
- 【Oracle的NVL函式用法】Oracle函式
- Oracle中rowid的用法Oracle
- 【oracle中rowid的用法】Oracle
- Oracle dump函式的用法Oracle函式
- Oracle trunc()函式的用法Oracle函式
- Oracle Hints語句的用法Oracle
- Oracle 函式 Translate 的用法Oracle函式
- oracle的with函式用法示例Oracle函式
- 常見Oracle HINT的用法Oracle
- ORACLE SQL的EXCEPT、INTERSECT用法OracleSQL
- oracle中copy from的用法Oracle
- 談談Oracle interMedia的用法Oracle