ORACLE存储过程,函数,包,游标

更新时间:2023-06-22 12:26:31 阅读: 评论:0

ORACLE存储过程,函数,包,游标1、  PL/SQL语句块
PL/SQL语句块只适⽤于Oracle数据库,使⽤时临时保存在客户端,⽽不是保存在数据库。
基本语法:
Sql代码
1. declare
2. 变量声明、初始化
3. begin
4. 业务处理、逻辑代码
5. exception
6. 异常捕获
7. end;
变量声明:<;变量名>  <;类型及长度>  [:=<;初始值>]
例:v_name varchar2(20):=’张三’;
2、循环语句
loop循环语法:
Sql代码
1. loop
2.  exit  when  表达式
3. end loop;
while循环语法:
Sql代码
1. while 表达式
2.  loop
3.  end loop;
for循环语法:
Sql代码
1. for  <;变量>  in  <;变量取值范围(⼩值..⼤值,如1..100)> loop
2. end loop;
for循环的变量可不做声明及初始化。
3、  if判断语句
基本语法:
Sql代码
1. if  <;表达式>  then
2. …
3. el  if  <;表达式>  then
4. …
5. el
6. …
7. end  if;
8. end  if;
例:
Sql代码
1. declare
2.  v_identity number(4):=0;鹰眼巴顿
3. begin
4.  loop
5.    if v_identity=1 then
6.      dbms_output.put_line('v_identity=1');
7.    el if v_identity=3 then
8.      dbms_output.put_line('v_identity=3');
9.    el if v_identity=6 then
10.      exit;
11.    el
12.      dbms_output.put_line('v_identity is not 1 or 3');
13.    end if;
14.    end if;
15.    end if; -- 注意,有多少个if就要有多少个end if结束标志。
16.
17.    v_identity:=v_identity+1;
18.
19.  end loop;
20.
21. exception
22.  when others then dbms_output.put_line('error!');
23. end;
4、分⽀ca
基本语法:
上海演讲培训Sql代码
1. ca  <;变量>
2. when  常量  then
3. …
4. when  常量  then
5. …
6. el
7.      …
8. end ca;
例:
Sql代码
1. declare
2.  v_number number(4):=3;
3.  v_string varchar(20):='abc';
4. begin
5.  ca v_number
6.    when 1 then
7.      dbms_output.put_line('v_number is '||1);
8.    when 2 then
9.      dbms_output.put_line('v_number is '||2);
10.    when 3 then
11.      dbms_output.put_line('v_number is '||3);
12.
13.  end ca;
14.
15.  ca v_string
16.    when 'ab' then
17.      dbms_output.put_line('v_string is '||'ab');
byzantine
18.    when 'bc' then
19.      dbms_output.put_line('v_string is '||'bc');
20.    el -- 缺省匹配
21.      dbms_output.put_line('v_string is other value');
22.  end ca;
23.
24. exception
nonresident
25.  when others then dbms_output.put_line('error!');
26. end;
5、异常(exception)
声明异常语法:<;异常名>  exception;
抛出异常语法:rai  <;异常名>;
捕获异常语法:when  <;异常名>  then  异常处理语句;
例:
Sql代码
1. declare
2.  v_input varchar2(1):='&throw';-- 动态输⼊
3.  v_exception_1 exception; -- ⾃定义异常
4.  v_exception_2 exception;
5.  others exception; -- 系统异常
6.
7. begin
犯罪心理第一季
8.  if v_input='1' then
9.    rai v_exception_1; -- 抛出异常
10.  el if v_input='2' then
11.    rai v_exception_2;
12.  el
13.    rai others;
14.  end if;
15.  end if;
16.
17. exception
18.  -- 捕获异常
19.
20.  when v_exception_1 then dbms_output.put_line('throw exception: v_exception_1');
21.  when v_exception_2 then dbms_output.put_line('throw exception: v_exception_2');
22.  when others then dbms_output.put_line('throw exception: others');
23.
24. end;
6、游标(cursor)
声明游标语法:cursor  <;游标名>  is  lect语句;
声明ref游标语法:<;游标名>  is  ref  cursor;
打开游标语法:open  <;游标名>;
移动游标并获取数据语法:fetch  <;游标名>  into  <⽤于保存读取的数据的变量的名>;
关闭游标语法:clo  <;游标名>;
游标属性(游标的属性必须在关闭游标之前):
%isopen: 判断游标是否打开
%notfound: 找不到数据时
%found:
%rowcount: 返回当前游标已扫描的数据⾏数量
游标分类:1、显⽰游标(⾃定义游标);2、隐⽰游标(系统游标);3、REF游标
例:
Sql代码
1. declare
2.  v_row test%rowtype; -- 匹配t_test表中⼀⾏所有的数据类型
3.  cursor v_cur is
4.    lect * from test;-- 声明游标
5. begin
6.  open v_cur;-- 打开游标
8.    fetch v_cur into v_row;-- 将游标所在⾏的数据转存到v_row中
9.    exit when v_cur%notfound; -- 当游标到最后⼀⾏时跳出
10.    dbms_output.put_line('id = '||v_row.t_id||'  name = '||v_row.t_name||'  msg = '||v_row.t_msg);
11.  end loop;
12.  clo v_cur;-- 关闭游标
13. exception
14.  when others then dbms_output.put_line('throw exception: others');
15. end;
-- REF游标 --
Sql代码
1. create or replace package upk_lect_test
2. as
3. type uc_test is ref cursor; -- 声明ref游标
4. end upk_lect_test;
5.
6. -- 存储过程中调⽤ref游标,并将查询结果以游标的⽅式返回
7. create or replace procedure up_lect_test_2
8. (uc_result out upk_lect_test.uc_test)
oltc
9. is
10. begin
11.  open uc_result for lect * from t_test;
12. end up_lect_test_2;
7、通配类型操作符
%type: 通配某⾏某列数据类型,如v_name t_test.t_name%type;通配表t_test中的t_name。
%rowtype: 通配⼀⾏所有列的数据类型,如 v_row t_test%rowtype;匹配t_test表中⼀⾏所有的数据类型。
8、存储过程(procedure)
基本语法:
dcgSql代码
1. create  procedure  <;过程名>(<;参数列表,⽆参时忽略>)
2. as|is
3. 变量声明、初始化
4. begin
5. 业务处理、逻辑代码
6. exception
7. 异常捕获、容错处理
8. end  <;过程名>;
参数:<;参数名> in|out|in out  <;参数类型,⽆长度说明> ,如:v_name  varchar2
in:⼊参
out:出参
in out:出⼊参
注:as|is表⽰as或is
调⽤语法:
1)、exec  <;过程名>;
2)、execute  <;过程名>;
3)、在PL/SQL语句块中直接调⽤
例:
Sql代码
1. create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)
2. is
3. v_temp varchar2(20);
5.  dbms_output.put_line('交换前参数1:'||v_param1||'  参数2:'||v_param2);
6.  v_temp:=v_param1;
7.  v_param1:=v_param2;
8.  v_param2:=v_temp;
ankara9.  dbms_output.put_line('交换后参数1:'||v_param1||'  参数2:'||v_param2);
10.
11. exception
12.  when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');
13. end up_wap;
-- 调⽤存储过程
Sql代码
1. declare
2.    v_param1 varchar2(20):='param1';
3.    v_param2 varchar2(20):='param2';
4. begin
5.  up_wap(v_param1 => v_param1,v_param2 => v_param2);
6. end;
9、⾃定义函数(function)
基本语法:
Sql代码
1. create  function  <;函数名>(<;参数列表,⽆参时忽略>)
2. return  <;返回值类型,⽆长度说明>
3. as|is
4. 变量声明、初始化
5. begin
6. 业务处理、逻辑代码
7.  return  <;返回的值>;
8.
9. exception
10. 异常捕获、容错处理
11. end  <;函数名>;
参数:in  ⼊参
自学日语教材
注:只有⼊参的类型。
在存储过程和⾃定义函数中的参数的传递(⼊参和出参)不能使⽤%type或%rowtype匹配,不能使⽤空值null,但是存储过程可以返回空值。
例:
Sql代码
1. create function uf_lect_name_by_id_test(v_id in number)
2. return varchar2
逃出洛杉矶
3. is
4. v_name t_test.t_name%type;
5. begin
6.  lect t_name into v_name from t_test where t_id=v_id;
7.  return v_name;
8.
9. exception
10.  when others then
11.    dbms_output.put_line('error');
12. end uf_lect_name_by_id_test;
13.
14.
15. lect uf_lect_name_by_id_test(1) 姓名 from dual;-- lect调⽤
16.
17. declare --pl/sql语句块调⽤

本文发布于:2023-06-22 12:26:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1013401.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游标   语法   参数   数据   变量   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图