《PLSQL之存储过程.docx》由会员分享,可在线阅读,更多相关《PLSQL之存储过程.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、存储过程1 什么是存储过程?用于在数据库中完成特定的操作或者任务。是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用。2 存储过程的参数模式调用环境 IN 类型的参数 OUT类型的参数 IN OUT类型的参数存储过程的参数特性:IN类型的参数OUT类型的参数IN-OUT类型的参数值被传递给子程序返回给调用环境传递给子程序返回给调用环境参数形式常量未初始化的变量初始化的变量使用时默认类型必须明确指定必须明确指定3 无参数存储过程的使用:CREATE OR REPLACE PROCEDURE 过程名 (parameter,.)IS定义变量BeginPlsql程序End;例:创建一个存
2、储过程,用于向数据库中插入一条记录。第一步:创建CREATE OR REPLACE PROCEDURE pro_1ISBegin insert into person values (11,aa,aav);End;第二步:在sql*plus中执行该过程exec pro_1;第三步:通过JDBC使用存储过程。private Connection conn = null;private ResultSet rs = null;private CallableStatement state = null;/调用一个无参数的存储过程public void testPro()conn = Tools.g
3、etConnection();try state = conn.prepareCall(call pro_1);state.execute(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();4 带有IN类型参数的存储过程的使用。例:创建一个存储过程,用于向数据库中插入一条记录。第一步:创建CREATE OR REPLACE PROCEDURE pro_2(id number,name varchar2,email varchar2)ISBegin insert into person valu
4、es (id,name,email);End;第二步:在sql*plus中执行该过程exec pro_2(12,aaa,aaa);第三步:通过JDBC使用存储过程。/使用一个带有 IN 类型参数的存储过程public void testPro_in(int id,String name,String email)conn = Tools.getConnection();try state = conn.prepareCall(call pro_2(?,?,?);state.setLong(1, id);state.setString(2, name);state.setString(3, em
5、ail);state.execute(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();5 带有out类型参数的存储过程的使用。例:创建一个存储过程,用于返回数据库中的Person表的总行数。第一步:创建CREATE OR REPLACE PROCEDURE pro_3(num out number)ISmynum number;Begin select count(*) into mynum from person; num := mynum;End;或者CREATE OR REPLACE
6、PROCEDURE pro_3(num out number)ISBegin select count(*) into num from person;End;第二步:在sql*plus中执行该过程declare a number;begin pro_3(a); dbms_output.put_line(a);end;第三步:通过JDBC使用存储过程。public void testPro_out()conn = Tools.getConnection();try state = conn.prepareCall(call pro_3(?);state.registerOutParameter
7、(1, Types.NUMERIC);state.execute();int num = state.getInt(1);System.out.println(num); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); 6 带有in-out类型参数的存储过程的使用。创建:CREATE OR REPLACE PROCEDURE pro_4(num in out number)ISa number := 100;Begin num := a*num;End;在sql*plus中执行该过程declare a number := 12;begin pro_4(a); dbms_output.put_line(a);end;练习:已知有一员工表,请编写一个存储过程,可以通过部门ID得到该部门员工的平均工资。7 / 7