初次了解存储过程和存储函数和触发器的例子
2015-07-18 22:49
357 查看
--传参的存储过程
create or replace procedure addSalTo2(eno in number, num in number)
as
begin
update emp set sal = sal + num where empno = eno;
dbms_output.put_line(eno || '涨了' || num || '工资');
end;
begin
addsalTo2(7499, 400);
end;
--返回值的存储过程
create or replace procedure queryEmpNameSal(eno in number, pname out varchar2, psal out number) as
vsal emp.sal %type;
begin
select ename, sal into pname, psal from emp where empno = eno;
end;
--返回值的存储函数
create or replace function queryEmpNameSal2(eno in number, pname out varchar2, psal out number)
return varchar2
as
vsal emp.sal %type;
begin
select ename, sal into pname, psal from emp where empno = eno; return pname;
end;
--一般只有一个返回值的优先使用存储函数,其他都用存储过程
--触发器(非工作时间) 语句级别,,
create or replace trigger mytigger
before insert
on emp
declare
--变量
begin
if not(to_number(to_char(sysdate, 'hh24')) between 9 and 17) then
raise_application_error(-20004, '现在是非工作时间,不能插入数据!');
end if;
end;
--行级别的触发器
create or replace trigger checkSal
before update
on emp
for each row
declare
begin
if :new.sal <= :old.sal then raise_application_error(-20000, '涨工资不能越长越少!');
end if;
end;
--闪回
show recyclebin --查看回收站
flashback table tableName to before drop;--恢复删除的表
select * from emp;
create or replace procedure addSalTo2(eno in number, num in number)
as
begin
update emp set sal = sal + num where empno = eno;
dbms_output.put_line(eno || '涨了' || num || '工资');
end;
begin
addsalTo2(7499, 400);
end;
--返回值的存储过程
create or replace procedure queryEmpNameSal(eno in number, pname out varchar2, psal out number) as
vsal emp.sal %type;
begin
select ename, sal into pname, psal from emp where empno = eno;
end;
--返回值的存储函数
create or replace function queryEmpNameSal2(eno in number, pname out varchar2, psal out number)
return varchar2
as
vsal emp.sal %type;
begin
select ename, sal into pname, psal from emp where empno = eno; return pname;
end;
--一般只有一个返回值的优先使用存储函数,其他都用存储过程
--触发器(非工作时间) 语句级别,,
create or replace trigger mytigger
before insert
on emp
declare
--变量
begin
if not(to_number(to_char(sysdate, 'hh24')) between 9 and 17) then
raise_application_error(-20004, '现在是非工作时间,不能插入数据!');
end if;
end;
--行级别的触发器
create or replace trigger checkSal
before update
on emp
for each row
declare
begin
if :new.sal <= :old.sal then raise_application_error(-20000, '涨工资不能越长越少!');
end if;
end;
--闪回
show recyclebin --查看回收站
flashback table tableName to before drop;--恢复删除的表
select * from emp;
相关文章推荐
- C---测试程序1
- 对JDK的深入理解
- jeecg项目源码maven工程搭建
- [POJ2417]Discrete Logging
- [LeetCode]Path Sum
- json 总结
- subversion check out时报错 Can't read from connection 远程主机强迫关闭了一个现有的连接
- ROS进阶学习手记 4 -- 使用Eclipse开发ROS
- 编写一个C++风格的程序,计算输出Fibonacci数列的前20项
- 大数据的经济效益
- C语言的内存管理分析 栈区 代码区 堆区 静态区 常量区
- 题目1196:成绩排序
- Unity中的模式——协同程序介绍
- Android WebView页面加载优化
- CentOS之VI编辑器的常用命令
- COJ 1011: Counting Pixels 暴力不解决问题
- HTML5媒体
- linux 高性能服务器编程
- 虚拟机挂载问题
- 矩阵内存排布