oracle 触发器

it2022-05-05  76

1.创建语法

create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。触发时间:指明触发器何时执行,该值可取:before:表示在数据库动作之前触发器执行;after:表示在数据库动作之后触发器执行。触发事件:指明哪些数据库动作会触发此触发器:insert:数据库插入会触发此触发器;update:数据库修改会触发此触发器;delete:数据库删除会触发此触发器。表 名:数据库触发器所在的表。for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

2.举个栗子

create or replace trigger auth_secure before insert or update or DELETE on tb_emp begin IF(to_char(sysdate,'DY')='星期日') THEN RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp'); END IF; END; /

3.语法备注

CREATE OR REPLACE TRIGGER TEST_TRIGGER AFTER DELETE OR INSERT OR UPDATE ON TEST DECLARE ------声明变量 V_TYPE TEST_LOG.L_TYPE%TYPE; IF INSERTING THEN V_TYPE := 'INSERT'; ---------- := 是赋值运算符

 3.   ACL权限设置    sql命令

BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'email_server_permissions.xml', description => 'Enables network permissions for the e-mail server', principal => 'DBA', --此为将来要进行操作的用户 is_grant => TRUE, privilege => 'connect'); END; BEGIN --2. 将此 ACL 与邮件服务器相关联, DBMS_NETWORK_ACL_ADMIN.assign_acl ( acl => 'email_server_permissions.xml', host => '172.10.0.56', --SMTP服务器地址 lower_port => 25, upper_port => 25); COMMIT; END; BEGIN --3.创建访问控制列表(ACL)network_services, DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'network_services.xml', description => 'Enables network permissions for the e-mail server', principal => 'DBA', --此为将来要进行操作的用户 is_grant => TRUE, privilege => 'connect'); END; BEGIN --4. 将此 ACL 与邮件服务器相关联, DBMS_NETWORK_ACL_ADMIN.assign_acl ( acl => 'network_services.xml', host => '172.10.0.56', --SMTP服务器地址 lower_port => NULL, upper_port => NULL); COMMIT; END;

4.触发器访问网络

p_url:='http://172.10.0.56/fd/app/ChangeResidentPhone'; http_req:=utl_http.begin_request(p_url,'GET'); http_resp := utl_http.get_response(http_req, TRUE); loop utl_http.read_raw(http_resp, l_raw,1024); l_r:=l_r||utl_raw.cast_to_varchar2(l_raw); end loop; utl_http.end_response(http_resp);

 

转载于:https://www.cnblogs.com/leolzi/p/9049467.html

相关资源:Oracle触发器修改自身表

最新回复(0)