oracle 存储过程、存储函数、程序包
来源:互联网 发布:51内核单片机 编辑:程序博客网 时间:2024/04/26 06:55
Oracle数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数等都是数据库对象
存储在数据库中 供用户程序调用的子程序叫:存储过程或者存储函数
相同点:完成特定功能的程序
区别:存储函数用return语句返回值
一般来讲:如果只有一个返回值,则用存储函数,否则(有多个或者没有返回值),使用存储过程
一、存储过程:
1、创建存储过程语法:
1)、exec sayhello();
2)、begin
sayhello();
end;
=============================================
*创建带输入参数(in类型)的存储过程:
*创建带输入输出参数(in类型,out类型)的存储过程:
二、存储函数:
* 创建存储函数语法:
*创建存储函数:
注意:nvl(a,0) 表示如果a为空值,则让a等于0
*/
*********************************************************************************************************************************
三、JDBC 访问存储过程和存储函数:(注:需求jar包:ojdbc14.jar)
//访问存储函数示例
四、在out参数中使用光标:
1、声明包结构
2、包头
3、包体
创建包:
在应用程序(Java)中访问包下面的存储过程:
注意:需要带上包名
存储在数据库中 供用户程序调用的子程序叫:存储过程或者存储函数
相同点:完成特定功能的程序
区别:存储函数用return语句返回值
一般来讲:如果只有一个返回值,则用存储函数,否则(有多个或者没有返回值),使用存储过程
一、存储过程:
1、创建存储过程语法:
create or replace procedure 过程名(参数) as plsql子程序体;2、调用存储过程:(两种方法)
1)、exec sayhello();
2)、begin
sayhello();
end;
=============================================
*创建带输入参数(in类型)的存储过程:
create or replace procedure raisesalary(eno in number)as --定义变量 psal emp.salary%typebegin --程序体 select salary into psal from emp where empno = eno; update emp set sal = sal + 100 where empno = eno; --注意:一般不在存储过程或者存储函数里面commit或者rollback --输出 dbms_output.put_line('涨工资前薪水:'||psal||' 涨工资后薪水:'||(psal+100));end;=============================================
*创建带输入输出参数(in类型,out类型)的存储过程:
create or replace procedure queryempinfo(eno in number, pname out varchar2(20), psal out number, pjob out varchar2(20))asbegin --程序体 select ename,salary,ejob into pname,psal,pjob from emp where empno = eno;end;*********************************************************************************************************************************
二、存储函数:
* 创建存储函数语法:
create or replace function 函数名(参数) return 函数值类型 as plsql 子程序体;=============================================
*创建存储函数:
create or replace function(eno in number)return numberas --定义变量 psal emp.salary%type; pcomm emp.comm%type;begin --程序体 select sal,comm into psal,pcomm from emp where empno = eno; --返回值 return psal * 12 + nvl(pcomm,0);end;/*
注意:nvl(a,0) 表示如果a为空值,则让a等于0
*/
*********************************************************************************************************************************
三、JDBC 访问存储过程和存储函数:(注:需求jar包:ojdbc14.jar)
private static String driver = "oracle.jdbc.OracleDriver";private static String url= "jdbc:oracle:thin:@localhost:1521:orcl";private static String user= "scott";private static String passsword= "tiger";=============================================//访问存储过程示例@Testpublic void testProcedure(){ String sql = "{call queryempinfo(?,?,?,?)}";--------------------------重点(一个输入参数,三个输出参数) Connection conn = null; CallableStatement call = null; --------------------------重点(CallableStatement接口的应用) conn = DBUtil.getConnection(); call = conn.prepareCall(sql); --------------------------重点 //对于输入参数,赋值 call.setInt(1,7890); //对于输出参数,声明类型 call.registerOutParameter(2,OracleTypes.VARCHAR); --------------------------重点 call.registerOutParameter(3,OracleTypes.NUMBER); call.registerOutParameter(4,OracleTypes.VARCHAR); //执行调用 call.execute(); //取出结果 String name = call.getString(2); double salary = call.getDouble(3); String job = call.getString(4);}=============================================
//访问存储函数示例
@Testpublic void testProcedure(){ String sql = "{ ? = call queryempinfo(?)}";--------------------------重点(一个输入参数,一个返回值) Connection conn = null; CallableStatement call = null; --------------------------重点(CallableStatement接口的应用) conn = DBUtil.getConnection(); call = conn.prepareCall(sql); --------------------------重点 //对于输出参数,声明类型 call.registerOutParameter(1,OracleTypes.NUMBER); --------------------------重点 //对于输入参数,赋值 call.setInt(2,7890); //执行调用 call.execute(); //取出结果 double salary = call.getDouble(1);}*********************************************************************************************************************************
四、在out参数中使用光标:
1、声明包结构
2、包头
3、包体
创建包:
create or replace package mypackage as type empcursor is ref cursor; ------------自定义一个类型作为输出参数类型 procedure queryempinfo(dno in number,emplist out empcursor);end mypackage;创建包体:
cteate or replace package body mypackage as procedure queryempinfo(dno in number,emplist out empcursor) as begin --打开光标 open emplist for select * from emp where depno = dno; end queryempinfo;end mypackage;==========================================
在应用程序(Java)中访问包下面的存储过程:
注意:需要带上包名
//访问包中的存储过程示例@Testpublic void testProcedure(){ String sql = "{call mypackage.queryempinfo(?,?)}";--------------------------重点(一个输入参数,一个输出参数) Connection conn = null; CallableStatement call = null; --------------------------重点(CallableStatement接口的应用) ResultSet rs = null; conn = DBUtil.getConnection(); call = conn.prepareCall(sql); --------------------------重点 //对于输入参数,赋值 call.setInt(1,7890); //对于输出参数,声明类型 call.registerOutParameter(2,OracleTypes.CURSOR); --------------------------重点 //执行调用 call.execute(); //取出结果 rs = ((OracleCallableStatement)call).getCursor(2); while(rs.next()){ int empno = rs.getInt("empno"); String name = rs.getString("ename"); }}
0 0
- oracle 存储过程、存储函数、程序包
- oracle 存储过程、存储函数、程序包
- Oracle回顾--存储过程、函数、程序包
- Oracle存储过程和程序包
- Oracle存储过程和程序包
- Oracle存储过程和程序包
- Oracle存储过程和程序包
- Oracle 程序包里 直接调用 存储过程
- 4、存储过程、函数、触发器,程序包
- 存储过程、自定义函数和程序包
- Oracle:存储过程,存储函数
- Oracle-存储过程 存储函数
- Oracle存储过程、存储函数
- oracle 存储函数,存储过程
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- 一个项目引出的对ORACLE中带参视图、存储过程、函数、程序包的使用
- HTML实现贪吃蛇
- Redis 命令
- Android设置状态栏为透明
- 读书学习心得
- cocoapods出现的问题
- oracle 存储过程、存储函数、程序包
- jquery.form.js提交form表单 上传文件
- 打擂台排序与冒泡排序(未完)
- Android 高德地图添加线段纹理
- poj2386.cpp
- 富文本编辑器kinduditor的使用
- 观察者模式--农民的故事
- MFC笔记:实现左键拖拽
- 遇见大数据可视化:基础研究