创建存储过程:
语法: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、导包

在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 存储过程,函数和包的更多相关文章

  1. Oracle存储过程和程序包

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

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

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

  3. oracle存储过程函数

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

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

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

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

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

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

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

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

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

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

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

  9. oracle 存储过程 包 【转】

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

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

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

随机推荐

  1. PHP之路——MySql基础操作语句

    1,创建数据库,create datebase 数据库名,在这里kenan建立一个数据库名为myfirstdb create database myfirstdb; 2,查看所有的数据库 show d ...

  2. lucene拼写检查模块

    Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块. 搜索拼写检查模块实现类在lucene-suggest-x.xx.x ...

  3. Web前端开发人员和设计师必读文章推荐

    推荐一个很好的学习资源: Web前端开发人员和设计师必读文章推荐[系列一] Web前端开发人员和设计师必读文章推荐[系列二] Web前端开发人员和设计师必读文章推荐[系列三] Web前端开发人员和设计 ...

  4. WPS怎样设置多级标题(如四级标题)

    WPS期初,乍一看最多只能设置三级标题. 怎样设置四级以上标题呢? 这里以设置四级标题为例: 点击‘视图’->'大纲', 假如,现在2.3.3这一行是三级标题: 在下拉框里选择‘4级’就可以了. ...

  5. Ubuntu14.04 安装QQ国际版wine-qqintl

    Ubuntu14.04安装qq国际版方式: 首先下载,链接为:  https://pan.baidu.com/s/1boPitVD 密码:jp1j 也可去Ubuntu中文的Kylin(优麒麟)官网下载 ...

  6. 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...

  7. Android新浪微博客户端(二)——添加多个账户及认证

    原文出自:方杰| http://fangjie.info/?p=69  转载请注明出处 先看下实现效果: 欢迎界面: 第一次进入登录界面登录由于在登录界面没有已授权用户信息,所以自动跳转到授权界面. ...

  8. Windows 已在 DImageProcess.exe 中触发一个断点。

    其原因可能是堆被损坏,这说明 DImageProcess.exe 中或它所加载的任何 DLL 中有 Bug. 原因也可能是用户在 DImageProcess.exe 具有焦点时按下了 F12. 输出窗 ...

  9. jQuery Ajax全解析

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 我们先来看一些简单的方法,这些方法都是对jQuery.ajax( ...

  10. SQL中Merge的用法

    SQL中Merge的用法 Merge的用法 Merge可以完成以下功能: 1.  两个表之间数据的更新 2.  进行进销存更新库存 3.  进行表之间数据的复制 语法说明: 1.  在语句结束后一定要 ...