oracle 存储过程函数,oracle 存储过程,函数和包

创建存储过程:

语法:create [or replace] PROCEDURE 过程名(参数列表)

AS

PLSQL子程序体;

调用 存储过程的方式 两种

1、execute(exec)     ------exec  函数名()

2、begin

函数名()

end           -------begin  函数名()end

函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。

建立存储函数的语法:

CREATE [OR REPLACE] FUNCTION 函数名(参数列表)

RETURN  函数值类型

AS

PLSQL子程序体;

一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。

但过程和函数都可以通过out指定一个或多个输出参数。

我们可以利用out参数,在过程和函数中实现返回多个值。

如果只有一个返回值,用存储函数;否则,就用存储过程。

一般不在存储过程和存储函数中做提交和回滚操作

如果一个存储过程中含有很多个返回值,需要在存储过程中全部写出来,比较的不方便,所以可以让存储过程中返回一个指针进行处理,即包

--存储过程

create or replace procedure getEmpInfo(eno in testemp.empno%type,--输入值in可以省略

empname out varchar,--输出值out必须要,只需要写返回类型,不需要写精度

empjob out varchar,

empsal out number

)

as

begin

select ename,job,sal into empname,empjob,empsal from testemp where empno=eno;

end;

--函数

create or replace function getSals(eno in testemp.empno%type)

return testemp.sal%type --定义返回类型

as

psal testemp.sal%type;

pcomm testemp.comm%type;

begin

select sal,comm into psal,pcomm from testemp where empno=eno;

return (psal*12+nvl(pcomm,0)); --返回值

end;

--创建包

create or replace package mypackage as--mypackage 自定义包名

type empcursor is ref cursor;--声明一个自定义光标类型

procedure queryemp(dtno in testemp.deptno%type,

empinfo out empcursor );--存储过程

end mypackage;--结束包头定义

create or replace --创建包体

package body mypackage as

procedure queryemp(dtno in testemp.deptno%type,empinfo out empcursor) as

begin

open empinfo for select * from testemp where deptno=dtno;--将查询到的数据放到光标中

end queryemp;

end mypackage;

在java中调用存储过程,函数

1、导包

bddc34d7182d1e39df38e06ed43d07ba.png在oracle安装目录product10.2.0\db_1\jdbc\lib目录下。默认在C:\oracle\product\10.2.0\db_1\jdbc\lib

2、

java连接oracle驱动

private static String driver="oracle.jdbc.OracleDriver";

private static String url="jdbc:oracle:thin:@192.168.250.144:1521:orcl";

private static String user="scott";

private static String password="tiger";

3、

调用存储过程

String sql="{call getEmpInfo(?,?,?,?)}";//调用存储过程sql语句

Connection conn=null;

CallableStatement callStatement=null;

try {

conn=OracleUtils.getConnection();

callStatement=conn.prepareCall(sql);

callStatement.setInt(1, 7839);//设置输入值

callStatement.registerOutParameter(2,OracleTypes.VARCHAR);//设置输出值

callStatement.registerOutParameter(3,OracleTypes.VARCHAR);

callStatement.registerOutParameter(4,OracleTypes.NUMBER);

callStatement.execute();//执行存储过程

String name=callStatement.getString(2);//获取输出值

String job=callStatement.getString(3);

double sal=callStatement.getDouble(4);

System.err.println("name="+name);

System.err.println("job="+job);

System.err.println("sal="+sal);

} catch (Exception e) {

e.printStackTrace();

}finally{

OracleUtils.release(conn, callStatement, null);

}

调用函数

String sql="{?= call getSals(?)}";

Connection conn=null;

CallableStatement call=null;

try {

conn=OracleUtils.getConnection();

call=conn.prepareCall(sql);

call.registerOutParameter(1, OracleTypes.NUMBER);

call.setInt(2, 7839);

call.execute();

double allsal=call.getDouble(1);

System.err.println(allsal);

} catch (Exception e) {

e.printStackTrace();

}finally{

OracleUtils.release(conn, call, null);

}

调用带有光标返回值得包

String sql="{call mypackage.queryemp(?,?)}";

Connection conn=null;

CallableStatement call=null;

ResultSet rs=null;

try {

conn=OracleUtils.getConnection();

call=conn.prepareCall(sql);

call.setInt(1, 30);

call.registerOutParameter(2, OracleTypes.CURSOR);

call.execute();

rs=((OracleCallableStatement)call).getCursor(2);//获取光标值的结果集

while(rs.next())//循环光标

{

String name=rs.getString("ename");

String job=rs.getString("job");

System.err.println("name:"+name+" job:"+job);

}

} catch (Exception e) {

e.printStackTrace();

}

Oracle存储过程和程序包

一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

oracle 过程函数,包的区别和联系

一.过程与函数区别 1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回:函数有且仅有1个返回值,通过return语句返回. 2.调用过程时,可做为单独的语句执行:调用函数时,函数必 ...

oracle存储过程函数

1.函数 create or replace function get_Destroy_no return varchar2 is Result varchar2(50);begin SELECT m ...

Oracle存储过程 函数 计算使用资源

目录 存储过程与函数 存储过程的优势 存储过程 打印语句 选择语句 函数 计算使用资源 存储过程与函数 存储过程的优势 存储过程 /* 多行注释 */ -- 单行注释 //展示错误信息 show er ...

hibernate调用oracle存储过程||函数

pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...

Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_MET ...

oracle 存储过程,存储函数,包,

http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...

oracle中函数和存储过程的区别和联系【转载竹沥半夏】

oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

oracle 存储过程 包 【转】

一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包

匿名PL/SQL块回顾 DECLARE (可选)    定义在PL/SQL块中要使用的对象BEGIN (必须)    执行语句EXCEPTION (可选)    错误处理语句END; (必须)匿名块( ...

随机推荐

Debian 8中dpkg -i自动解决依赖关系

dpkg -i 后#apt-get update &&apt-get -f install

JAVA虚拟机类型转换学习

Java虚拟机包括血多进行基本类型转换工作的操作码,这些执行转换工作的操作码后面没有操作数,转换的值从栈顶端获得.Java虚拟机从栈顶端弹出一个值,对它进行转换,然后再把转换结果压入栈.进行int.l ...

Wix 安装部署(二)自定义安装界面和行为

上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnblogs.com/stoneniqiu/p/3355086.html . 这篇会在上篇的基础上 ...

c# ToString() 用法

string tempa = Convert.ToString(31, 2);//将10进制数31转换为2进制字符串. string strNums = int.Parse(tempa).ToStri ...

NSAssert用法

今天突然发现了一个开发ios程序时调试的好帮手-NSAssert()函数.而且和NSLog()函数一样简单易用,代码如下: NSAssert(x!=0,@"x must not be zer ...

js获取事件源

js获取事件源:  1.       event.srcElement.nodeName   //获取事件源对象,但是火狐不支持event 2.

【风马一族_git_github】git的工作流程

git有三个区域(如图): 基本信息设置 1)设置用户名   git config --global user.name  "帐号名" 2)设置用户名邮箱  git config ...

Redis学习笔记(十)——过期时间、访问限制与缓存

http://irfen.me/redis-learn-10-time-expire-limit-cache/ 过期时间 之前应该提到过 redis 的特性之一是可以设置键的超时时间.命令是expir ...

Java_java多线程下载-断点下载-超详细

基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息,并设置响应的头部信息.并且通过URLConnection获取输入流,将文件分成指定的块,每一块单独开辟一个线程完成数据的读 ...

【zigbee】开启及清除NV_RESTORE信息的方法

1.NV_RESTORE宏的作用 问:coo和终端都已经组网成功 1.这时将coo断电,又一次上电,组网后终端的短地址是否不变? 2.这时终端断电,又一次上电,组网后终端的短地址是否不变? 3.这时C ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值