oracle存储过程.docx
- 文档编号:8508062
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:141.39KB
oracle存储过程.docx
《oracle存储过程.docx》由会员分享,可在线阅读,更多相关《oracle存储过程.docx(17页珍藏版)》请在冰豆网上搜索。
oracle存储过程
存储过程
说在前面
1.Oracle中有PL-SQL(用来补充SQL语言)
2.SQLServer中有T-SQL
3.DML是第四代语言
学习
第一个小程序
程序如下:
begin
dbms_output.put_line('HelloWorld');
end;
/
在设置后将会显示结果
SQL>setserveroutputon;
SQL>ed
已写入fileafiedt.buf
1begin
2dbms_output.put_line('HelloWorld');
3*end;
SQL>/
HelloWorld
PL/SQL过程已成功完成。
变量声明
SQL>ed
已写入fileafiedt.buf
1declare
2v_namevarchar2(20);
3begin
4v_name:
='myname';
5dbms_output.put_line('HelloWorld');
6*end;
SQL>/
HelloWorld
PL/SQL过程已成功完成。
常用变量类型
变量声明
使用%type
v_empno2将随emp表中的empno的变化
Table变量:
Record变量类型
使用%rowtype声明record变量
适应表结构的变化
语句块的组成
SQL>ed
已写入fileafiedt.buf
1declare
2v_numnumber:
=0;--声明类型为number的变量v_num,并赋值0
3begin
4v_num:
=2/v_num;--相当于java中的v_num=2/v_num
5dbms_output.put_line(v_num);
6exception--异常
7whenothersthen
8dbms_output.put_line('error');
9*end;
SQL>/
error
PL/SQL过程已成功完成。
“--”开头为PL-SQL的单行注释
在PL-SQL语句中有且只有一条记录。
SQL语句的运用
select
SQL>ed
已写入fileafiedt.buf
1declare
2v_enameemp.ename%type;
3v_salemp.sal%type;
4begin
5selectename,salintov_ename,v_salfromempwhereempno=7369;
6dbms_output.put_line(v_ename||''||v_sal);
7*end;
SQL>/
SMITH800
PL/SQL过程已成功完成。
into为:
将select到的数据ename,sal写入到v_ename,v_sal中。
createtable
SQL>begin
2executeimmediate'createtableT(nnnvarchar2(20)default''aaa'')';
3end;
4/
PL/SQL过程已成功完成。
查看结果:
SQL>select*fromtab;
TNAMETABTYPECLUSTERID
-----------------------------------------------
DEPTTABLE
EMPTABLE
BONUSTABLE
SALGRADETABLE
BIN$VP4S+C3rRkWg+GPMXARASw==$0TABLE
DEPT1TABLE
TTABLE
已选择7行。
判断、选择、循环
判断
SQL>ed
已写入fileafiedt.buf
1declare
2v_salemp.sal%type;
3begin
4selectsalintov_salfromempwhereempno=7369;
5if(v_sal<1200)then
6dbms_output.put_line('low');
7elsif(v_sal<2000)then
8dbms_output.put_line('middle');
9else
10dbms_output.put_line('high');
11endif;
12*end;
SQL>/
low
PL/SQL过程已成功完成。
循环
简单循环
相当于java中的do循环
SQL>ed
已写入fileafiedt.buf
1declare
2ibinary_integer:
=1;
3begin
4loop
5dbms_output.put_line(i);
6i:
=i+1;
7exitwhen(i>=11);
8endloop;
9*end;
SQL>/
1
2
3
4
5
6
7
8
9
10
PL/SQL过程已成功完成。
SQL>
while
SQL>ed
已写入fileafiedt.buf
1declare
2jbinary_integer:
=1;
3begin
4whilej<11loop
5dbms_output.put_line(j);
6j:
=j+1;
7endloop;
8*end;
SQL>/
1
2
3
4
5
6
7
8
9
10
for
SQL>ed
已写入fileafiedt.buf
1begin
2forkin1..10loop
3dbms_output.put_line(k);endloop;
4forkinreverse1..10loop
5dbms_output.put_line(k);endloop;
6*end;
7/
123456789101
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
PL/SQL过程已成功完成。
Exception
too_many_rows
SQL>ed
已写入fileafiedt.buf
1declare
2v_tempnumber(4);
3begin
4selectempnointov_tempfromempwheredeptno=10;
5exception
6whentoo_many_rowsthen
7dbms_output.put_line('太多记录了');
8whenothersthen
9dbms_output.put_line('error');
10*end;
SQL>/
太多记录了
PL/SQL过程已成功完成。
no_data_found
SQL>ed
已写入fileafiedt.buf
1declare
2v_tempnumber(4);
3begin
4selectempnointov_tempfromempwhereempno=2222;
5exception
6whenno_data_foundthen
7dbms_output.put_line('没数据');
8*end;
SQL>/
没数据
PL/SQL过程已成功完成。
记录错误
记录用表
设置表为递增记录
尝试删除
游标cursor
游标的定义
简单循环输出
SQL>ed
已写入fileafiedt.buf
1declare
2cursorcis--游标的定义
3select*fromemp;
4v_empc%rowtype;
5begin
6openc;
7loop
8fetchcintov_emp;
9exitwhen(c%notfound);--注意顺序
10dbms_output.put_line(v_emp.ename);
11endloop;
12closec;
13*end;
SQL>/
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
PL/SQL过程已成功完成。
错误的输出做法
SQL>ed
已写入fileafiedt.buf
1declare
2cursorcis
3select*fromemp;
4v_empc%rowtype;
5begin
6openc;
7loop
8fetchcintov_emp;
9dbms_output.put_line(v_emp.ename);
10exitwhen(c%notfound);
11endloop;
12closec;
13*end;
14/
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
MILLER
while循环输出
for循环输出(最佳方式)
带参数的游标
可更新的游标(了解)
存储过程produce
创建存储过程
执行存储过程
方式一:
execp;
方式二:
begin
p;
end;
带参数的存储过程
createorreplaceprocedurep(v_ainnumber,v_bnumber,v_retoutnumber,v_tempinoutnumber)
is
begin
if(v_a>v_b)then
v_ret:
=v_a;
elsev_ret:
=v_b;
endif;
v_temp:
=v_temp+1;
end;
/
调用上述过程
编译错误
oracle不直接提示错误,可通过showerror显示错误:
删除存储过程
函数
创建函数
函数调用
触发器
使用到的表emp2_log
创建触发器
测试
更新数据
查看emp2_log表
删除触发器
触发器的副作用(很少用)
以下这种情况直接update是不行的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 存储 过程
![提示](https://static.bdocx.com/images/bang_tan.gif)