ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > Oracle - °Ñ´¥·¢Æ÷¿´Í¸

Oracle - °Ñ´¥·¢Æ÷¿´Í¸

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/12/2 21:02:30

AFTER DELETE ON emp

REFERENCING OLD AS old_emp FOR EACH ROW DECLARE I NUMBER; BEGIN

DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig2_delete ´¥·¢Æ÷¡­''); SELECT emp_count INTO I

FROM dept_summary WHERE deptno = :old_emp.deptno; IF I >1 THEN

UPDATE dept_summary

SET sal_sum=sal_sum - :old_emp.sal, Emp_count=emp_count - 1

WHERE deptno = :old_emp.deptno; ELSE

DELETE FROM dept_summary WHERE deptno = :old_emp.deptno; END IF; END;' );

INSERT INTO dept(deptno, dname, loc) VALUES(90, 'demo_dept', 'none_loc'); INSERT INTO emp(ename, deptno, empno, sal) VALUES(USER, 90, 9999, 3000);

INSERT INTO emp(ename, deptno, empno, sal) VALUES(USER, 90, 9998, 2000); DBMS_OUTPUT.PUT_LINE('²åÈëºó'); Disp_dept_summary();

UPDATE emp SET sal = sal*1.1 WHERE deptno=90; DBMS_OUTPUT.PUT_LINE('Ð޸ĺó'); Disp_dept_summary();

DELETE FROM emp WHERE deptno=90; DELETE FROM dept WHERE deptno=90; DBMS_OUTPUT.PUT_LINE('ɾ³ýºó'); Disp_dept_summary();

DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TRIGGER trig2_update'); DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TRIGGER trig2_insert'); DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TRIGGER trig2_delete'); EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END;

Àý3£ºÀûÓÃORACLEÌṩµÄÌõ¼þν´ÊINSERTING¡¢UPDATINGºÍDELETING´´½¨ÓëÀý2¾ßÓÐÏàͬ¹¦ÄܵĴ¥·¢Æ÷¡£

BEGIN

DBMS_OUTPUT.PUT_LINE('²åÈëǰ'); Disp_dept_summary();

DBMS_UTILITY.EXEC_DDL_STATEMENT( 'CREATE OR REPLACE TRIGGER trig2

AFTER INSERT OR DELETE OR UPDATE OF sal ON emp

REFERENCING OLD AS old_emp NEW AS new_emp FOR EACH ROW DECLARE I NUMBER; BEGIN

IF UPDATING AND :old_emp.sal != :new_emp.sal THEN DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig2 ´¥·¢Æ÷¡­'');

DBMS_OUTPUT.PUT_LINE(''sal ¾ÉÖµ£º''|| :old_emp.sal); DBMS_OUTPUT.PUT_LINE(''sal ÐÂÖµ£º''|| :new_emp.sal); UPDATE dept_summary

SET sal_sum=sal_sum + :new_emp.sal - :old_emp.sal WHERE deptno = :new_emp.deptno; ELSIF INSERTING THEN

DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig2´¥·¢Æ÷¡­''); SELECT COUNT(*) INTO I FROM dept_summary

WHERE deptno = :new_emp.deptno; IF I > 0 THEN

UPDATE dept_summary SET sal_sum=sal_sum+:new_emp.sal, Emp_count=emp_count+1 WHERE deptno = :new_emp.deptno; ELSE

INSERT INTO dept_summary

VALUES (:new_emp.deptno, :new_emp.sal, 1); END IF; ELSE

DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig2´¥·¢Æ÷¡­''); SELECT emp_count INTO I

FROM dept_summary WHERE deptno = :old_emp.deptno;

IF I > 1 THEN

UPDATE dept_summary

SET sal_sum=sal_sum - :old_emp.sal, Emp_count=emp_count - 1

WHERE deptno = :old_emp.deptno; ELSE

DELETE FROM dept_summary WHERE deptno = :old_emp.deptno; END IF; END IF; END;' );

INSERT INTO dept(deptno, dname, loc) VALUES(90, 'demo_dept', 'none_loc'); INSERT INTO emp(ename, deptno, empno, sal) VALUES(USER, 90, 9999, 3000);

INSERT INTO emp(ename, deptno, empno, sal) VALUES(USER, 90, 9998, 2000); DBMS_OUTPUT.PUT_LINE('²åÈëºó'); Disp_dept_summary();

UPDATE emp SET sal = sal*1.1 WHERE deptno=90; DBMS_OUTPUT.PUT_LINE('Ð޸ĺó'); Disp_dept_summary();

DELETE FROM emp WHERE deptno=90; DELETE FROM dept WHERE deptno=90; DBMS_OUTPUT.PUT_LINE('ɾ³ýºó'); Disp_dept_summary();

DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TRIGGER trig2'); EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END;

Àý4£º´´½¨INSTEAD OF ´¥·¢Æ÷¡£Ê×ÏÈ´´½¨Ò»¸öÊÓͼmyview, ÓÉÓÚ¸ÃÊÓͼÊǸ´ºÏ²éѯËù²úÉúµÄÊÓͼ£¬ËùÒÔ²»ÄÜÖ´ÐÐDMLÓï¾ä¡£¸ù¾ÝÓû§¶ÔÊÓͼËù²åÈëµÄÊý¾ÝÅжÏÐèÒª½«Êý¾Ý²åÈëµ½ÄĸöÊÓͼ»ù±íÖУ¬È»ºó¶Ô¸Ã»ù±íÖ´ÐвåÈë²Ù×÷¡£

DECLARE

No NUMBER;

Name VARCHAR2(20); BEGIN

DBMS_UTILITY.EXEC_DDL_STATEMENT(' CREATE OR REPLACE VIEW myview AS

SELECT empno, ename, ''E'' type FROM emp UNION

SELECT dept.deptno, dname, ''D'' FROM dept ');

-- ´´½¨INSTEAD OF ´¥·¢Æ÷trigger3; DBMS_UTILITY.EXEC_DDL_STATEMENT(' CREATE OR REPLACE TRIGGER trig3 INSTEAD OF INSERT ON myview REFERENCING NEW n FOR EACH ROW DECLARE

Rows INTEGER; BEGIN

DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig3´¥·¢Æ÷¡­''); IF :n.type = ''D'' THEN SELECT COUNT(*) INTO rows

FROM dept WHERE deptno = :n.empno; IF rows = 0 THEN

DBMS_OUTPUT.PUT_LINE(''Ïòdept±íÖвåÈëÊý¾Ý¡­''); INSERT INTO dept(deptno, dname, loc) VALUES (:n.empno, :n.ename, ''none¡¯¡¯); ELSE

DBMS_OUTPUT.PUT_LINE(''±àºÅΪ''|| :n.empno|| ''µÄ²¿ÃÅÒÑ´æÔÚ£¬²åÈë²Ù×÷ʧ°Ü£¡''); END IF; ELSE

SELECT COUNT(*) INTO rows

FROM emp WHERE empno = :n.empno; IF rows = 0 THEN

DBMS_OUTPUT.PUT_LINE('¡¯Ïòemp±íÖвåÈëÊý¾Ý¡­¡¯¡¯); INSERT INTO emp(empno, ename) VALUES(:n.empno, :n.ename); ELSE

DBMS_OUTPUT.PUT_LINE(''±àºÅΪ''|| :n.empno|| ''µÄÈËÔ±ÒÑ´æÔÚ£¬²åÈë²Ù×÷ʧ°Ü!''); END IF; END IF; END; ');

ËÑË÷¸ü¶à¹ØÓÚ£º Oracle - °Ñ´¥·¢Æ÷¿´Í¸ µÄÎĵµ
  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

AFTER DELETE ON emp REFERENCING OLD AS old_emp FOR EACH ROW DECLARE I NUMBER; BEGIN DBMS_OUTPUT.PUT_LINE(''ÕýÔÚÖ´ÐÐtrig2_delete ´¥·¢Æ÷¡­''); SELECT emp_count INTO I FROM dept_summary WHERE deptno = :old_emp.deptno; IF I >1 THEN UPDATE dept_summary SET sal_sum=sal_sum - :old_emp.sal, Emp_

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com