作者:尕丑de眸_879 | 来源:互联网 | 2014-07-11 17:33
Oracle基础学习笔记(4)1,insteadof触发器例句:createtriggerupdate_emp_job_viewInsteadofupdateOnemp_jobBeginUpdateempSetempno:new.empno,Ename:new....Syntax
Oracle基础学习笔记(4)
1, instead of 触发器
例句:create trigger update_emp_job_view
Instead of update
On emp_job
Begin
Update emp
Set empno=:new.empno,
Ename=:new.ename,
Job=:new.job
Where empno=:old.empno;
End;
在该示例中可以看出,在触发器主体中有一个对表emp的update关键字。由于emp_job视图是建立在emp表上的视图。所以,如果更新这个视图时,实际上就是更新该视图的基本表。
www.2cto.com
2, 系统时间触发器
Oracle系统还允许开发人员建立与特定系统事件相关的触发器。这些特定事件如下:
(2) 数据库关闭
(3) 服务器错误等
示例:
Create trigger ad_startup
After startup
On database
Begin
PL/SQL代码位置
End;
另外两个:
Before shutdown
Before servererror
补充:删除触发器:drop trigger trigger_name;
禁用触发器:alter trigger trigger_name diaable;
插入日期时的格式:
(1) insert into values(‘5-1月-12’);
(2) insert into table_name(date’2012-1-5’);
复制表:create table emp_copy
As select * from emp;
但如果想复制表结构,不想复制数据:
Create table emp_copy
As select * from emp
Where 1=2;
3, 控制语句
(1) 条件
If ……then…….else语句
有三种形式,分别如下:
第一种形式:
If expression then
语句
End if;
第二种形式:
If expression then
语句 www.2cto.com
Else
语句
End if;
第三种形式:
If expression then
语句
Else if expression then
语句
Else
语句
End if;
(2,case语句
Case value
When expression then
语句;
When expression then
语句;
……..
Else
语句;
End case;
4, 循环
(1) 无限制循环
其基本语法格式为:;loop…….end loop.无限制循环是指如果没有exit语句,循环将一直进行下去。
例句:set serverout on //打开屏幕输出
Declare loops number:=0;
Begin
Dbms_output.put_line(‘循环开始’);
Loop
If loops>4 then
Exit; www.2cto.com
End if;
Dbms_output.put_line(‘第’||loops||‘次循环’);
Loops:=loops+1;
End loop;
Dbms_output.put_line(‘循环结束’);
End;
(2) while循环
例子:
Declare loops number :=0;
Begin
Dbms_output.put_line(‘循环开始’);
While loops<5 loop
Dbms_output.put_line(‘第’||loops||‘次循环’);
Loops:=loops+1;
End loop;
Dbms_output.put_line(‘循环结束’);
End;
/
5, 情景查询
(1) decode()函数
decode(value_expression,search_value,result_value,default_value)
参数含义:
value_expression;表示将要与搜索值比较的值或表达式
search_value;表示将要搜索的值
result_value:表示search_value参数与value相等时value_expression参数的取值结果
default_value;表示search_value参数与value不相等时value_expression参数的取值结果
www.2cto.com
例句:select name ,sal,decode(deptno,’10’,’会计部’,’20’,’研发部’,’30’,’销售部’,’其他部门’) from emp
(2) case表达式
语法格式如下:
Case search_expression
When expression_1 then display_result_1
When expression_2 then display_result_2
……
When expression_n then display_result_n
Else default_display_result
End
参数意义如下:
search_expression:表示用于检索的表达式,一般情况下是表中的列名称
expression_1,……,expression_n:表示用于比较的表达式
display_result_1,……..,display_result_n:表示用于比较的表达式与search_expression参数匹配时应该显示的结果。
例句:select ename,sal,
Case deptno
When 10 then ‘会计部’
When 20 then ‘研发部’
Else ‘其他部门’
End
From emp;
与简单的case表达式相比,搜索表达式的每一个条件都可以不同,因此更加具有灵活性,搜索case表达式的语法格式如下:
Case www.2cto.com
When expression_1 then display_result_1
When expression_2 then display_result_2
……
When expression_n then display_result_n
Else default_display_result
End
例句:select ename.case
When hiredate<’1-7月-01’ then ‘老员工’
When hiredate>’1-7月-01’ and hiredate<=’1-7月-02’ then ‘普通员工’
When hiredate>’1-7月-02’ then ‘新员工’
End from emp;
作者 pzhtpf