创建存储过程:
语法: create [or replace] PROCEDURE过程名称(参数列表)
AS
PLSQL子程序
调用存储过程有两种方法
1、执行(执行(执行)------执行函数名称) ) )。
2、begin
函数名称() )。
end -------begin函数名称() end
函数是一个具有参数并返回计算值的命名存储程序。 函数类似于过程的结构,但需要返回函数值的RETURN子句。 指定函数的说明函数名称、结果值类型、参数类型等。
要创建存储函数的语法:
CREATE [OR REPLACE] FUNCTION函数名称(参数列表)
RETURN函数值类型
AS
PLSQL子程序
一般来说,过程和函数的区别在于函数可以有返回值,而过程没有返回值。
但是,过程和函数可以在out中指定一个或多个输出参数。
out参数允许过程和函数返回多个值。
如果只有一个返回值,则存储函数。 否则,使用存储过程。
存储过程和存储函数通常不提交或回滚
如果一个存储过程包含多个返回值,则必须向存储过程写入所有内容,而且相对不便,因此可以向存储过程返回一个指针进行处理。 也就是说是数据包
-存储过程
createorreplaceproceduregetempinfo (enointestemp.empno % type,--输入值in可选
empnameoutvarchar----输出值out是必需的,只是写返回类型,不需要写精度
empjob out varchar,
empsal out number
)
as
比根
select ename,job,sal into empname,empjob,empsalfromtestempwhereempno=eno;
结束;
-函数
createorreplacefunctiongetsals (enointestemp.empno % type )。
返回testemp.sal % type--定义返回类型
as
psal testemp.sal%type;
pcomm testemp.comm%type;
比根
select sal,comm into psal,pcomm from testemp where empno=eno;
返回(psal * 12 nvl ) pcomm,0 ); -返回值
结束;
-创建包
createorreplacepackagemypackageas--我的软件包自定义软件包名称
类型EMP cursor is ref cursor; -声明自定义光标类型
procedurequeryemp (dtnointestemp.deptno % type,
empinfo out empcursor; -存储过程
结束我的包; -结束标题定义
创建或替换- -创建一个案例
package body mypackage as
procedurequeryemp (dtnointestemp.deptno % type,empinfo out empcursor ) as
比根
openempinfoforselect * fromtestempwheredeptno=dtno; -将查询的数据放入光标
最终查询Emp;
结束我的包;
在java中调用存储过程、函数
1、引线包
位于oracle安装目录product10.2.0db_1jdbclib目录中。 默认值为c :Oracleproduct10.2.0db _1 JDBClib
2,
java连接oracle驱动程序
privatestaticstringdriver=' Oracle.JDBC.Oracle driver ';
privatestaticstringurl=' JDBC : Oracle : thin : @ 192.168.250.144336015213360 orcl ';
私有静态字符串用户=' Scott ';
私有状态密码=' tiger ';
3、
/p>调用存储过程
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 ...