freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]oracleplsql編程之8把觸發(fā)器說(shuō)透(編輯修改稿)

2024-09-13 04:20 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 *252。*252。**數(shù)據(jù)庫(kù)名稱252。*數(shù)據(jù)庫(kù)實(shí)例號(hào)252。*錯(cuò)誤號(hào)252。*用戶名252。**模式對(duì)象類(lèi)型252。**模式對(duì)象名稱252。**列252。*除DML語(yǔ)句的列屬性外,其余事件屬性值可通過(guò)調(diào)用ORACLE定義的事件屬性函數(shù)來(lái)讀取。函數(shù)名稱數(shù)據(jù)類(lèi)型說(shuō) 明Ora_syseventVARCHAR2(20)激活觸發(fā)器的事件名稱Instance_numNUMBER數(shù)據(jù)庫(kù)實(shí)例名Ora_database_nameVARCHAR2(50)數(shù)據(jù)庫(kù)名稱Server_error(posi)NUMBER錯(cuò)誤信息棧中posi指定位置中的錯(cuò)誤號(hào)Is_servererror(err_number)BOOLEAN檢查err_number指定的錯(cuò)誤號(hào)是否在錯(cuò)誤信息棧中,如果在則返回TRUE,否則返回FALSE。在觸發(fā)器內(nèi)調(diào)用此函數(shù)可以判斷是否發(fā)生指定的錯(cuò)誤。Login_userVARCHAR2(30)登陸或注銷(xiāo)的用戶名稱Dictionary_obj_typeVARCHAR2(20)DDL語(yǔ)句所操作的數(shù)據(jù)庫(kù)對(duì)象類(lèi)型Dictionary_obj_nameVARCHAR2(30)DDL語(yǔ)句所操作的數(shù)據(jù)庫(kù)對(duì)象名稱Dictionary_obj_ownerVARCHAR2(30)DDL語(yǔ)句所操作的數(shù)據(jù)庫(kù)對(duì)象所有者名稱Des_encrypted_passwordVARCHAR2(2)正在創(chuàng)建或修改的經(jīng)過(guò)DES算法加密的用戶口令例1:創(chuàng)建觸發(fā)器,存放有關(guān)事件信息。DESC ora_syseventDESC ora_login_user創(chuàng)建用于記錄事件用的表CREATE TABLE ddl_event(crt_date timestamp PRIMARY KEY,event_name VARCHAR2(20), user_name VARCHAR2(10),obj_type VARCHAR2(20),obj_name VARCHAR2(20))。創(chuàng)建觸犯發(fā)器CREATE OR REPLACE TRIGGER tr_ddlAFTER DDL ON SCHEMABEGININSERT INTO ddl_event VALUES(systimestamp,ora_sysevent, ora_login_user, ora_dict_obj_type, ora_dict_obj_name)。END tr_ddl。例2:創(chuàng)建登錄、退出觸發(fā)器。CREATE TABLE log_event(user_name VARCHAR2(10),address VARCHAR2(20), logon_date timestamp,logoff_date timestamp)。 創(chuàng)建登錄觸發(fā)器CREATE OR REPLACE TRIGGER tr_logonAFTER LOGON ON DATABASEBEGININSERT INTO log_event (user_name, address, logon_date)VALUES (ora_login_user, ora_client_ip_address, systimestamp)。END tr_logon。創(chuàng)建退出觸發(fā)器CREATE OR REPLACE TRIGGER tr_logoffBEFORE LOGOFF ON DATABASEBEGININSERT INTO log_event (user_name, address, logoff_date)VALUES (ora_login_user, ora_client_ip_address, systimestamp)。END tr_logoff。 使用觸發(fā)器謂詞ORACLE 提供三個(gè)參數(shù)INSERTING, UPDATING, DELETING 用于判斷觸發(fā)了哪些操作。謂詞行為INSERTING如果觸發(fā)語(yǔ)句是 INSERT 語(yǔ)句,則為T(mén)RUE,否則為FALSEUPDATING如果觸發(fā)語(yǔ)句是 UPDATE語(yǔ)句,則為T(mén)RUE,否則為FALSEDELETING如果觸發(fā)語(yǔ)句是 DELETE 語(yǔ)句,則為T(mén)RUE,否則為FALSE 重新編譯觸發(fā)器如果在觸發(fā)器內(nèi)調(diào)用其它函數(shù)或過(guò)程,當(dāng)這些函數(shù)或過(guò)程被刪除或修改后,觸發(fā)器的狀態(tài)將被標(biāo)識(shí)為無(wú)效。當(dāng)DML語(yǔ)句激活一個(gè)無(wú)效觸發(fā)器時(shí),ORACLE將重新編譯觸發(fā)器代碼,如果編譯時(shí)發(fā)現(xiàn)錯(cuò)誤,這將導(dǎo)致DML語(yǔ)句執(zhí)行失敗。在PL/SQL程序中可以調(diào)用ALTER TRIGGER語(yǔ)句重新編譯已經(jīng)創(chuàng)建的觸發(fā)器,格式為: ALTER TRIGGER [schema.] trigger_name COMPILE [ DEBUG]其中:DEBUG 選項(xiàng)要器編譯器生成PL/SQL 程序條使其所使用的調(diào)試代碼。 刪除和使能觸發(fā)器l 刪除觸發(fā)器:DROP TRIGGER trigger_name。當(dāng)刪除其他用戶模式中的觸發(fā)器名稱,需要具有DROP ANY TRIGGER系統(tǒng)權(quán)限,當(dāng)刪除建立在數(shù)據(jù)庫(kù)上的觸發(fā)器時(shí),用戶需要具有ADMINISTER DATABASE TRIGGER系統(tǒng)權(quán)限。此外,當(dāng)刪除表或視圖時(shí),建立在這些對(duì)象上的觸發(fā)器也隨之刪除。 l 禁用或啟用觸發(fā)器數(shù)據(jù)庫(kù)TRIGGER 的狀態(tài):有效狀態(tài)(ENABLE):當(dāng)觸發(fā)事件發(fā)生時(shí),處于有效狀態(tài)的數(shù)據(jù)庫(kù)觸發(fā)器TRIGGER 將被觸發(fā)。無(wú)效狀態(tài)(DISABLE):當(dāng)觸發(fā)事件發(fā)生時(shí),處于無(wú)效狀態(tài)的數(shù)據(jù)庫(kù)觸發(fā)器TRIGGER 將不會(huì)被觸發(fā),此時(shí)就跟沒(méi)有這個(gè)數(shù)據(jù)庫(kù)觸發(fā)器(TRIGGER) 一樣。數(shù)據(jù)庫(kù)TRIGGER的這兩種狀態(tài)可以互相轉(zhuǎn)換。格式為:ALTER TIGGER trigger_name [DISABLE | ENABLE ]。例:ALTER TRIGGER emp_view_delete DISABLE。ALTER TRIGGER語(yǔ)句一次只能改變一個(gè)觸發(fā)器的狀態(tài),而ALTER TABLE語(yǔ)句則一次能夠改變與指定表相關(guān)的所有觸發(fā)器的使用狀態(tài)。格式為: ALTER TABLE [schema.]table_name {ENABLE|DISABLE} ALL TRIGGERS。例:使表EMP 上的所有TRIGGER 失效:ALTER TABLE emp DISABLE ALL TRIGGERS。 觸發(fā)器和數(shù)據(jù)字典相關(guān)數(shù)據(jù)字典:USER_TRIGGERS、ALL_TRIGGERS、DBA_TRIGGERS SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT,TABLE_OWNER, BASE_OBJECT_TYPE, REFERENCING_NAMES,STATUS, ACTION_TYPEFROM user_triggers。 數(shù)據(jù)庫(kù)觸發(fā)器的應(yīng)用舉例例1:創(chuàng)建一個(gè)DML語(yǔ)句級(jí)觸發(fā)器,當(dāng)對(duì)emp表執(zhí)行INSERT, UPDATE, DELETE 操作時(shí),它自動(dòng)更新dept_summary 表中的數(shù)據(jù)。由于在PL/SQL塊中不能直接調(diào)用DDL語(yǔ)句,所以,利用ORACLE內(nèi)置包DBMS_UTILITY中的EXEC_DDL_STATEMENT過(guò)程,由它執(zhí)行DDL語(yǔ)句創(chuàng)建觸發(fā)器。CREATE TABLE dept_summary(Deptno NUMBER(2),Sal_sum NUMBER(9, 2),Emp_count NUMBER)。 INSERT INTO dept_summary(deptno, sal_sum, emp_count)SELECT deptno, SUM(sal), COUNT(*) FROM emp GROUP BY deptno。創(chuàng)建一個(gè)PL/SQL過(guò)程disp_dept_summary在觸發(fā)器中調(diào)用該過(guò)程顯示dept_summary標(biāo)中的數(shù)據(jù)。CREATE OR REPLACE PROCEDURE disp_dept_summaryISRec dept_summary%ROWTYPE。CURSOR c1 IS SELECT * FROM dept_summary。BEGINOPEN c1。FETCH c1 INTO REC。(39。deptno sal_sum emp_count39。)。(39。39。)。WHILE c1%FOUND LOOP(RPAD(, 6)||To_char(, 39。$999,39。)||LPAD(, 13))。FETCH c1 INTO rec。END LOOP。CLOSE c1。END。BEGIN(39。插入前39。)。Disp_dept_summary()。(39。CREATE OR REPLACE TRIGGER trig1AFTER INSERT OR DELETE OR UPDATE OF sal ON empBEGIN(39。39。正在執(zhí)行trig1 觸發(fā)器…39。39。)。DELETE FROM dept_summary。INSERT INTO dept_summary(deptno, sal_sum, emp_count)SELECT deptno, SUM(sal), COUNT(*) FROM emp GROUP BY deptno。END。39。)。INSERT INTO dept(deptno, dname, loc) VALUES(90, ‘demo_dept’, ‘none_loc’)。INSERT INTO emp(ename, deptno, empno, sal)VALUES(USER, 90, 9999, 3000)。(39。插入后39。)。Disp_dept_summary()。UPDATE emp SET sal=1000 WHERE empno=9999。(39。修改后39。)。Disp_dept_summary()。DELETE FROM emp WHERE empno=9999。DELETE FROM dept WHERE deptno=90。(39。刪除后39。)。Disp_dept_summary()。 (‘DROP TRIGGER trig1’)。EXCEPTIONWHEN OTHERS THEN(SQLCODE||39。39。||SQLERRM)。END。例2:創(chuàng)建DML語(yǔ)句行級(jí)觸發(fā)器。當(dāng)對(duì)emp表執(zhí)行INSERT, UPDATE, DELETE 操作時(shí),它自動(dòng)更新dept_summary 表中的數(shù)據(jù)。由于在PL/SQL塊中不能直接調(diào)用DDL語(yǔ)句,所以,利用ORACLE內(nèi)置包DBMS_UTILITY中的EXEC_DDL_STATEMENT過(guò)程,由它執(zhí)行DDL語(yǔ)句創(chuàng)建觸發(fā)器。BEGIN(39。插入前39。)。Disp_dept_summary()。(39。CREATE OR REPLACE TRIGGER trig2_updateAFTER UPDATE OF sal ON empREFERENCING OLD AS old_emp NEW AS new_empFOR EACH ROWWHEN ( != )BEGIN(39。39。正在執(zhí)行trig2_update 觸發(fā)器…39。39。)。(39。39。sal 舊值:39。39。|| :)。(39。39。sal 新值:39。39。|| :)。UPDATE dept_summarySET sal_sum=sal_sum + : :WHERE deptno = :。END。39。)。(39。CREAT
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1