收藏 分享(赏)

oracle存储过程.ppt

上传人:精品资料 文档编号:11040825 上传时间:2020-02-05 格式:PPT 页数:27 大小:204KB
下载 相关 举报
oracle存储过程.ppt_第1页
第1页 / 共27页
oracle存储过程.ppt_第2页
第2页 / 共27页
oracle存储过程.ppt_第3页
第3页 / 共27页
oracle存储过程.ppt_第4页
第4页 / 共27页
oracle存储过程.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、Oracle存储过程,什么是存储过程?为啥要用存储过程?,存储过程:存储过程可以说是一个记录集。它是由一些T-SQL(Transact-SQL = SQL 程式设计语言的增强版,T-SQL包含了SQL,如select * from TABLE 这既是一个 T-SQL又是SQL语句,例如BEGIN: DBMS_OUTPUT(1111); END 这属于T-SQL语句 不是SQL语句)语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(如对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用对应名称即可。,存储过程优点,1)速度上:由于数据库执行动作时,是

2、先编译在执行,然而存储过程属于已编译过的代码块,所以执行效率比SQL执行效率快; 2)当对数据库进行复杂操作时(如对多个表进行 UPDATE,INSERT,QUERY,DELETE 时),可将这些复杂操作改用存储过程封装起来之后节后数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了; 3)存储过程可以重复使用,可减少数据库开发人员的工作量,如果内容修改后,可直接重新编译即可使用,相对于同功能的后台实现,可以减少服务器重启等。,存储过程优点,3)安全性高,可设定只有某此用户才具有对指定存储过

3、程的使用权; 4)使用存储过程,可以实现存储过程设计和编码工作分开进行,只要将存储过程名、参数、及返回信息告诉编码人员即可;,存储过程的语法结构,结构如下: create or replace procedure存储过程名称(参数1 in (out) 类型.) as(is) 声明语句段,如声明存储过程中所要使用到的局部参数变量,以及游标的声明等等。 begin 执行语句段,具体的业务逻辑; exception 异常处理语句段; end 存储过程名称;,存储过程的参数,参数说明: 存储过程的参数类型:char,varchar2,number,Integer,Date,以及oracle 的其他数据

4、类型。 存储过程中的变量声明: 第一种:直接声明如,字段名 类型名(长度),fieldname varchar2(32) 第二种:根据某张表的表字段类型声明: 字段名 表名称.字段名%type fieldname student.sno%type,参数过程的调用执行,PLSQL中调用存储过程的语句 命令窗口模式中的调用执行:exec 存储过程名称(参数1,2.)注:调用的过程中,不论有没有参数,其()可有可无。 存储过程中调用另一个存储过程存储过程名称();注:调用的过程中,不论有没有参数,其()是必不可少的。 后台方法的调用存储过程无参存储过程调用:call procedure_name()

5、 ;有输入参数的调用:call procedure_name(?,?) ;,创建过程实例,创建名为stu_proc的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程. 该过程定义了一个变量,其类型和student数据表中的sname字段类型相同,都是字符型,将数据表中的sno字段为1的sname字段内容送入变量中,然后输出结果. 表结构: create table student(guid varchar2(32) primary key ,sno number(6),sname varchar2(32),pno number(6) ); alter tabl

6、e student modify guid default sys_guid();,参数过程实例,无参数存储过程(包含两种方式的变量声明): create or replace procedure stu_proc as(is) -变量的声明区 pname varchar2(25); beginselect sname into pname from student where sno=1;dbms_output.put_line(pname); end;或 create or replace procedure stu_proc as pname student.sname%type; be

7、ginselect sname into p_name from student where sno=1;dbms_output.put_line(pname); end;,仅有输入参数的过程 create or replace procedure stu_proc1(pno in student.sno%type,pno1 in varchar2) as pname varchar2(25); beginselect sname into pname from student where sno=pno;dbms_output.put_line(pname|pno1);end;,存储过程,仅

8、有输出参数的存储过程 create or replace procedure stu_proc2(pname out student.sname%type) as beginselect sname into pname from student where sno=1;dbms_output.put_line(pname);end; 此种存储过程不能直接用call来调用,这种情况的调用将在下面oracle函数调用中说明,参数过程实例,有输入输出参数的存储过程: create or replace procedure stu_proc3 (pno in student.sno%type,pna

9、me out student.sname%type) as beginselect sname into pname from student where sno=pno;dbms_output.put_line(pname);end; 此种存储过程不能直接用call来调用,这种情况的调用将在下面oracle函数调用中说明,参数过程实例,Oracle函数调用存储过程,我们已经学习了oracle函数,下面就针对参数的4种情况分别举出实例说明函数对存储过程的调用,对无参数过程的调用:-函数声明 create or replace function get_pname return varchar2

10、 is pname varchar2(20);beginstu_proc;select sname into pname from student where sno=1;return pname;end; 测试窗口中的调用, declare begindbms_output.put_line(在PL/SQL中打印的结果:|get_pname);end;,函数调用存储过程实例,对有输入参数过程的调用: create or replace function get_pname1(pno in number) return varchar2 is pname varchar2(20);begins

11、tu_proc1(pno in student.sno%type) select sname into pname from student where sno=pno;return pname;end; -调用 declare begindbms_output.put_line(在PL/SQL中打印的结果:|get_pname1(2);end;,函数调用存储过程实例,对有输出参数过程的调用:create or replace function get_pname2(pname out varchar2) return varchar2 isbeginstu_proc2(pname out s

12、tudent.sname%type);return pname;end; -调用 declare pname student.sname%type; begindbms_output.put_line(在PL/SQL中打印的结果:|get_pname2(pname);end;,函数调用存储过程实例,对有输入输出参数过程的调用:create or replace function get_pname3(pno in number,pname out varchar2) return varchar2 isbeginstu_proc3(pno in student.sno%type,pname o

13、ut student.sname%type);return pname;end; -调用 declare pname student.sname%type; begindbms_output.put_line(在PL/SQL中打印的结果:|get_pname3(2,pname);end;,函数调用存储过程实例,JAVA调用数据库存储过程,前面我们已经讲述了有关oracle数据库的存储过程的几种形式,以及oracle函数对存储过程的调用,下面我将根据上面存储过程的实例来举出JAVA对oracle存储过程的调用,无参数过程: DbOper oper = DbOper.getdbOper(); St

14、ring sql=“call stu_proc()“;oper.executeprocedure(sql);,JAVA调用实例,仅有返回值的过程 public void no_paramsCall() DbOper oper = DbOper.getdbOper(); String sql=“call stu_proc()“;oper.executeprocedure(sql); ,JAVA调用实例,既有输入参数又有输出参数的过程 DbOper oper = DbOper.getdbOper(); String sql=“call stu_proc3(?,?)“; Object params

15、= 1,222; String str = oper.executeprocedure_inAndOut(sql,params); return str;,JAVA调用实例,游标,什么是游标? 从表中检索出结果集,从中每次指向一条记录进行交互的机制 游标从概念上讲基于数据库的表返回结果集 游标有什么作用?指定结果集中特定行的位置。 基于当前的结果集位置检索一行或连续的几行。 在结果集的当前位置修改行中的数据。 对其他用户所做的数据更改定义不同的敏感性级别。 可以以编程的方式访问数据库。,游标的声明,FOR循环游标 -(1)定义游标 -(2)定义游标变量 -(3)使用for循环来使用这个游标 d

16、eclare-类型定义cursor c_studentisselect *from student -定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型c_row c_student %rowtype; beginfor c_row in c_student loopdbms_output.put_line(c_row.pno|-|c_row.pname);end loop; end;,游标的声明,Fetch游标 -使用的时候必须要明确的打开和关闭 declare -类型定义cursor c_studentisselect * from stu

17、dent; -定义一个游标变量c_row c_student%rowtype; beginopen c_student;loop-提取一行数据到c_rowfetch c_student into c_row;-判读是否提取到值,没取到值就退出-取到值c_job%notfound 是false -取不到值c_job%notfound 是trueexit when c_job%notfound;dbms_output.put_line(c_row.pno|-|c_rowpname);end loop;-关闭游标close c_job; end;,数据库函数和存储过程的包,创建包(package) 函数: create or replace package 包名 as 函数 注意:as后可加多个函数 存储过程: Create or replace package 包名 as 存储过程 注意:as后可加多个存储过程,函数的包调用: call 包名.函数名; 存储过程的包调用: call 包名.存储过程名;,包的调用,THE END,谢谢,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报