ORACLE 觸發器語法及例項 三
SELECT * FROM dept_sal;
--建立觸發器,它記錄表的刪除資料
--建立表
CREATE TABLE employee
(
id VARCHAR2(4) NOT NULL,
name VARCHAR2(15) NOT NULL,
age NUMBER(2) NOT NULL,
sex CHAR NOT NULL
);
DESC employee;
--插入資料
INSERT INTO employee VALUES('e101','zhao',23,'M');
INSERT INTO employee VALUES('e102','jian',21,'F');
--建立記錄表
CREATE TABLE old_employee AS
SELECT * FROM employee;
DESC old_employee;
--建立觸發器
CREATE OR REPLACE TRIGGER tig_old_emp
AFTER DELETE ON employee --
FOR EACH ROW --語句級觸發,即每一行觸發一次
BEGIN
INSERT INTO old_employee
VALUES(:old.id,:old.name,:old.age,:old.sex); --:old代表舊值
END;
/
--下面進行測試
DELETE employee;
SELECT * FROM old_employee;
--建立觸發器,利用檢視插入資料
--建立表
CREATE TABLE tab1 (tid NUMBER(4) PRIMARY KEY,tname VARCHAR2(20),tage NUMBER(2));
CREATE TABLE tab2 (tid NUMBER(4),ttel VARCHAR2(15),tadr VARCHAR2(30));
--插入資料
INSERT INTO tab1 VALUES(101,'zhao',22);
INSERT INTO tab1 VALUES(102,'yang',20);
INSERT INTO tab2 VALUES(101,'13761512841','AnHuiSuZhou');
INSERT INTO tab2 VALUES(102,'13563258514','AnHuiSuZhou');
--建立檢視連線兩張表
CREATE VIEW tab_view AS
SELECT tab1.tid,tname,ttel,tadr FROM tab1,tab2
WHERE tab1.tid = tab2.tid;
--建立觸發器
CREATE OR REPLACE TRIGGER tab_trigger
INSTEAD OF INSERT ON tab_view
BEGIN
INSERT INTO tab1(tid,tname) VALUES(:new.tid,:new.tname);
INSERT INTO tab2(ttel,tadr) VALUES(:new.ttel,:new.tadr);
END;
/
--現在就可以利用檢視插入資料
INSERT INTO tab_view VALUES(105,'zhaoyang','13886681288','beijing');
--檢視效果
SELECT * FROM tab_view;
--建立觸發器,比較emp表中更新的工資
CREATE OR REPLACE TRIGGER sal_emp
BEFORE UPDATE ON emp
FOR EACH ROW
BEGIN
IF :OLD.sal > :NEW.sal THEN
DBMS_OUTPUT.PUT_LINE('工資減少');
ELSIF :OLD.sal < :NEW.sal THEN
DBMS_OUTPUT.PUT_LINE('工資增加');
ELSE
DBMS_OUTPUT.PUT_LINE('工資未作任何變動');
END IF;
DBMS_OUTPUT.PUT_LINE('更新前工資 :' || :OLD.sal);
DBMS_OUTPUT.PUT_LINE('更新後工資 :' || :NEW.sal);
END;
/
--執行UPDATE檢視效果
UPDATE emp SET sal = 3000 WHERE empno = '7788';
--建立觸發器,將操作CREATE、DROP儲存在log_info表
--建立表
CREATE TABLE log_info
(
manager_user VARCHAR2(15),
manager_date VARCHAR2(15),
manager_type VARCHAR2(15),
obj_name VARCHAR2(15),
obj_type VARCHAR2(15)
);
--建立觸發器
CREATE OR REPLACE TRIGGER trig_log_info
AFTER CREATE OR DROP ON SCHEMA
BEGIN
INSERT INTO log_info
VALUES(USER,SYSDATE,SYS.DICTIONARY_OBJ_NAME,SYS.DICTIONARY_OBJ_OWNER,
SYS.DICTIONARY_OBJ_TYPE);
END;
/
--測試語句
CREATE TABLE a(id NUMBER);
CREATE TYPE aa AS OBJECT(id NUMBER);
/
DROP TABLE a;
DROP TYPE aa;
--檢視效果
SELECT * FROM log_info;
--相關資料字典-----------------------------------------------------//
SELECT * FROM USER_TRIGGERS;
SELECT * FROM ALL_TRIGGERS;
SELECT * FROM DBA_TRIGGERS; --必須以DBA身份登陸才能使用此資料字典
--啟用和禁用
ALTER TRIGGER trigger_name DISABLE;
ALTER TRIGGER trigger_name ENABLE;
★========================================
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31444259/viewspace-2139139/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL觸發器例項講解SQL觸發器
- Python中的if、while、for 語法及例項PythonWhile
- Python中compile函式的語法及例項!PythonCompile函式
- flex佈局語法+例項Flex
- 語句觸發器觸發器
- Oracle開發基礎-觸發器Oracle觸發器
- HTML基本語法和語義寫法規則與例項HTML
- Oracle minus用法詳解及應用例項Oracle
- 禁止oracle表的觸發器triggerOracle觸發器
- Oracle select 語句字串拼接小例項-quote使用Oracle字串
- 4.1. Oracle例項Oracle
- Oracle Far Sync例項Oracle
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- 【PSU】Oracle打PSU及解除安裝PSU(單例項)Oracle單例
- Python裝飾器例項講解(三)Python
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- oracle資料庫與oracle例項Oracle資料庫
- oracle 例項表查詢Oracle
- CMakeLists.txt 語法介紹與例項演練
- Oracle 操作表結構基本語法及示例Oracle
- Oracle 19C 監聽無法動態註冊例項Oracle
- php語法同java語法的基本區別(例項專案需求,php才能熟)PHPJava
- NIO原理及例項
- makefile--偽目標語法與程式設計例項程式設計
- 暫存器,觸發器,三極體小結觸發器
- oracle partition by 語法Oracle
- 原生javascript開發計算器例項JavaScript
- SpringCloud——Feign例項及原理SpringGCCloud
- oracle 12c 資料庫例項監聽無法註冊問題一例Oracle資料庫
- MySQL與SQL的觸發器的不同寫法MySql觸發器
- 【Oracle】ASM例項安裝入門OracleASM
- oracle 10203啟動例項報警Oracle
- oracle監聽不到例項服務Oracle
- vlc qt player 播放器開發例項QT播放器
- C#例項化物件的三種方式及效能對比C#物件
- 【SPM】Oracle計劃管理器SPM介紹及用例Oracle
- Vue例項及生命週期Vue
- Exchanger的工作原理及例項
- 出售短影片平臺,多節點例項資料同步觸發的方式