oracle存储过程实例

上传人:飞*** 文档编号:2191273 上传时间:2017-07-21 格式:PPT 页数:34 大小:88KB
返回 下载 相关 举报
oracle存储过程实例_第1页
第1页 / 共34页
oracle存储过程实例_第2页
第2页 / 共34页
oracle存储过程实例_第3页
第3页 / 共34页
oracle存储过程实例_第4页
第4页 / 共34页
oracle存储过程实例_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《oracle存储过程实例》由会员分享,可在线阅读,更多相关《oracle存储过程实例(34页珍藏版)》请在金锄头文库上搜索。

1、Oracle存储过程实例,过程,过程就是高级程序设计语言中的模块的概念,将一些内部联系的命令组成一个个过程,通过参数在过程之间传递数据是模块化设计思想的重要内容.,存储过程特点,1)存储过程是预编译过的,并且经优化后存储于SQL内存中,使用时无需再次编译,提高了工作效率;2)存储过程的代码直接存放于数据库中,一般由客户端直接通过存储过程的名字进行调用,减少了网络流量,加快了系统执行速度,例如在进行百万以上的大批量数据查询时,使用存储过程分页要比其他方式分页快得多;3)使用存储过程可以减少SQL注入式攻击,提高了系统的安全性,执行存储过程的用户要具有一定的权限才能使用存储过程,没有数据操作权限的

2、用户只能在其控制下间接地存取数据;,存储过程特点,4)在同时进行主、从表及多表间的数据维护及有效性验证时,使用存储过程比较方便,而且可以有效利用SQL中的事务处理的机制;5)使用存储过程,可以实现存储过程设计和编码工作分开进行,只要将存储过程名、参数、及返回信息告诉编码人员即可;6)但使用存储过程封装业务逻辑将限制应用程序的可移植性;另外,如果更改存储过程的参数或者其返回的数据及类型的话,需要修改应用程序的相关代码,比较繁琐。,过程的语法结构,完整的过程结构如下: create or replace procedure 过程名 as 声明语句段; begin 执行语句段; exception

3、异常处理语句段; end;过程是有名称的程序块,as关键词代替了无名块的declare.,创建过程实例,创建名为stu_proc的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程.该过程定义了一个变量,其类型和student数据表中的sname字段类型相同,都是字符型,将数据表中的sno字段为1的sname字段内容送入变量中,然后输出结果.,参数,SQL中调用存储过程语句:callprocedure_name();调用时”()”是不可少的,无论是有参数还是无参数。定义对数据库过程的调用时无参数过程:callprocedure_name仅有输入参数的过程:cal

4、lprocedure_name(?,?.)这里?表示输入参数,创建存储过程时用in表示输入参数仅有输出参数的过程:Callprocedure_name(?,?.)这里的?表示输出参数,创建存储过程时用out表示输入参数既有输入参数又有输出参数的过程callprocedure_name(?,?.)这里的?有表示输出参数的,也有表示输入参数的下面将会对这4种情况分别举出实例!,参数过程实例,无参数存储过程:create or replace procedure stu_proc aspname varchar2(25);begin select sname into pname from stud

5、ent where sno=1; dbms_output.put_line(pname);end;或者create or replace procedure stu_proc aspname student.sname%type;begin select 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) aspname varchar2(25);be

6、gin select sname into pname from student where sno=pno; dbms_output.put_line(pname); end;,参数过程实例,仅有输出参数的存储过程create or replace procedure stu_proc2(pname out student.sname%type) asbegin select sname into pname from student where sno=1; dbms_output.put_line(pname); end;此种存储过程不能直接用call来调用,这种情况的调用将在下面ora

7、cle函数调用中说明,参数过程实例,有输入输出参数的存储过程:create or replace procedure stu_proc3(pno in student.sno%type,pname out student.sname%type) asbegin select sname into pname from student where sno=pno; dbms_output.put_line(pname); end;此种存储过程不能直接用call来调用,这种情况的调用将在下面oracle函数调用中说明,参数过程实例,Oracle函数调用存储过程,我们已经学习了oracle函数,下面

8、就针对参数的4种情况分别举出实例说明函数对存储过程的调用,对无参数过程的调用: -函数create or replace function get_pname return varchar2 is pname varchar2(20); begin stu_proc; select sname into pname from student where sno=1; return pname; end;-调用declarebegin dbms_output.put_line(在PL/SQL中打印的结果:|get_pname); end;,函数调用存储过程实例,对有输入参数过程的调用:creat

9、e or replace function get_pname1(pno in number) return varchar2 is pname varchar2(20); begin stu_proc1(pno in student.sno%type) select sname into pname from student where sno=pno; return pname; end;-调用declarebegin dbms_output.put_line(在PL/SQL中打印的结果:|get_pname1(2); end;,函数调用存储过程实例,对有输出参数过程的调用: create

10、 or replace function get_pname2(pname out varchar2) return varchar2 is begin stu_proc2(pname out student.sname%type); return pname; end;-调用declarepname student.sname%type;begin dbms_output.put_line(在PL/SQL中打印的结果:|get_pname2(pname); end;,函数调用存储过程实例,对有输入输出参数过程的调用: create or replace function get_pname3

11、(pno in number,pname out varchar2) return varchar2 is begin stu_proc3(pno in student.sno%type,pname out student.sname%type); return pname; end;-调用declarepname student.sname%type;begin dbms_output.put_line(在PL/SQL中打印的结果:|get_pname3(2,pname); end;,函数调用存储过程实例,JAVA调用数据库存储过程,前面我们已经讲述了有关oracle数据库的存储过程的几种形

12、式,以及oracle函数对存储过程的调用,下面我将根据上面存储过程的实例来举出JAVA对oracle存储过程的调用,仅有返回值的过程:public static void main(String args) Connection conn=BBConnection.getConnection();String sql=call stu_proc2(?);try CallableStatement statement=conn.prepareCall(sql);statement.registerOutParameter(1,Types.VARCHAR);statement.execute();

13、String pname=statement.getString(1);System.out.println(pname); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();,JAVA调用实例,既有输入参数又有输出参数的过程public static void main(String args) Connection conn=BBConnection.getConnection();String sql=call stu_proc3(?,?);try CallableStatement s

14、tatement=conn.prepareCall(sql);statement.setInt(1, 1);statement.registerOutParameter(2,Types.VARCHAR);statement.execute();String pname=statement.getString(2);System.out.println(pname); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();,JAVA调用实例,下面将举出无out参数的调用实例这种参数不适于用在查询语句

15、上,因为查询语句需要有返回值才能被JAVA调用返回到 OUT 参数中的值可能会是JDBC NULL。当出现这种情形时,将对 JDBC NULL 值进行转换以使 getXXX 方法所返回的值为 null、0 或 false,这取决于getXXX 方法类型。对于 ResultSet 对象,要知道0或false是否源于JDBCNULL的唯一方法,是用方法wasNull进行检测。如果 getXXX 方法读取的最后一个值是 JDBC NULL,则该方法返回 true,否则返回 flase,JAVA调用实例,仅有参数的过程:public static void main(String args) Conn

16、ection conn=BBConnection.getConnection();String sql=call stu_proc1(?);try CallableStatement statement=conn.prepareCall(sql);statement.setInt(1, 1);statement.execute();System.out.println(statement.execute(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();finallytry conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号