1 /*
2
3 1. 触发器
4 什么是触发器?
5 更改表中数据时,自动执行的一组代码。
6
7 触发器特征:
8 触发事件、触发条件、触发操作。
9 事件(insert、update、delete)
10 条件(on 表对象)
11 操作(具体的plsql功能代码)
12 时机(先后循环;之前执行(before)、之后执行(after))
13
14 触发器的分类(级别):表级别、行级别。
15
16 行级别:NEW(新的数据)、:OLD(旧的数据)
17
18 表级别示例:before insert on test1
19 行级别示例:before insert on test1 for each row
20
21
22 2. 程序包。
23
24 */
25 -------------------------------------程序包--------------------------------------------
26 --包(将过程、函数逻辑上存放在一起)
27 --存储过程、函数
28
29 --系统内置包。
30 dbms_output
31 dbms_lob
32
33 --用户自定义包。
34
35 --包(包头(过程、函数的声明)、包体(过程、函数具体实现))
36
37 --包头
38 create or replace package first_package
39 as
40 procedure show99;
--99乘法表
41 procedure showEmpInfo(eno
number);
42 end first_package;
43
44 --包体(具体实现)
45 create or replace package body first_package
46 as
47 procedure show99
48 as
49 begin
50 for i
in 1..
9 loop
51 for j
in 1..i loop
52 dbms_output.put(i
*j
||' ');
53 end loop;
54 dbms_output.put_line(
'');
55 end loop;
56 end show99;
57
58 procedure showEmpInfo(eno
number)
59 as
60 empinfo scott.emp
%rowtype;
61 begin
62 select * into empinfo
from scott.emp
where empno
=eno;
63 dbms_output.put_line(empinfo.empno
||':'||empinfo.ename);
64 exception
65 when no_data_found
then
66 dbms_output.put_line(
'没有找到该员工的信息');
67 when others
then
68 dbms_output.put_line(
'others.............');
69 end showEmpInfo;
70 end first_package;
71
72 --调用
73 begin
74 first_package.showEmpInfo(
&编号);
75 end;
76
77 select first_package.fun
from dual;
78
79
80
81
82
83
84
85
86
87
88 -------------------------------------触发器操作--------------------------------------------
89 --将表锁定(判断星期一、星期五表中的数据,可以正常操作;否则不能操作该表数据)
90
91 create or replace trigger trig_test_table
92 before
insert or update or delete on test1
93 declare
94 cweekday
varchar2(
20);
95 begin
96 select to_char(sysdate,
'dy')
into cweekday
from dual;
97 if cweekday
='星期六' or cweekday
='星期日' then
98 dbms_output.put_line(
'你不能操作这张表哟!');
99 raise_application_error(
-20005,
'今天系统放假了!');
--抛异常,阻止用户操作
100 end if;
101 end;
102
103 select to_char(sysdate,
'dy')
from dual;
104
105
106 create table test1
107 (
108 tid
int primary key,
109 tname
varchar2(
20)
110 )
111
112 insert into test1
values (sequ_test1.nextval,
'admin')
113
114 create sequence sequ_test1
115
116
117 select * from test1
118
119 --能否利用触发器,给test1表添加一个自动增长列。
120 --drop trigger trigger_test1
121 create or replace trigger trigger_test1
122 before
insert on test1
for each row
123 declare
124 begin
125 select sequ_test1.nextval
into :NEW.tid
from dual;
126 end;
转载于:https://www.cnblogs.com/huzi007/archive/2013/01/25/2876379.html
相关资源:个人亲测oracle触发器调用java程序