使用scott账户下的dept表;

select * from dept order by deptno;

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

为了演示方便,插入一条数据:

insert into dept(deptno, dname, loc) values(50,'SYSTEM', 'NEW YORK');

新插入的记录为:50 SYSTEM NEW YORK

我们主要演示在package中存储过程的返回类型为pipelined table,cursor 和 value三种。

1.返回类型为pipelined table。  

create or REPLACE type dept_obj is OBJECT( DEPTNO NUMBER(2,0), DNAME VARCHAR2(14 BYTE) );

create or REPLACE type dept_obj_type AS table of dept_obj;

2.定义package 和package body。

 create or replace package SPTest
is
/*return a pipelined demo start*/
type dept_data_rec_type is RECORD(
DEPTNO NUMBER(2,0),
DNAME VARCHAR2(14)
); type dept_ref_type is REF CURSOR; function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined;
/*return a pipelined demo end*/ /*return a cursor demo start*/
FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type;
/*return a cursor demo end*/ /* return a varchar value start */
function getName(in_deptno in number) RETURN VARCHAR2;
/* return a varchar value end */
end SPTest;
/
-----------------------------------------------------------------------------------------------
create or replace package body SPTest
is
/*return a pipelined demo start*/
function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined is
l_dept_obj dept_obj :=dept_obj(null, null);
dept_ref_type_cursor dept_ref_type;
dept_data_rec dept_data_rec_type;
begin
open dept_ref_type_cursor
for select deptno, dname from dept where loc = in_loc; loop
fetch dept_ref_type_cursor into dept_data_rec;
exit when dept_ref_type_cursor%NOTFOUND;
l_dept_obj.DEPTNO := dept_data_rec.DEPTNO;
l_dept_obj.DNAME := dept_data_rec.DNAME; pipe row(l_dept_obj);
end loop;
close dept_ref_type_cursor;
RETURN ;
end getDept;
/*return a pipelined demo end*/ /*return a cursor demo start*/
FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type
AS
dept_ref_type_cursor dept_ref_type;
BEGIN OPEN dept_ref_type_cursor FOR
SELECT deptno, dname, loc FROM dept where deptno = in_deptno; RETURN dept_ref_type_cursor; END getDeptInfo;
/*return a cursor demo end*/ /* return a varchar value start */
function getName(in_deptno in number) RETURN VARCHAR2
as rtn_deptname VARCHAR2(100);
begin
select dname into rtn_deptname from dept where deptno = in_deptno;
RETURN rtn_deptname;
end getName;
/* return a varchar value start */ end SPTest;
/

最后,执行存储过程。

/*返回pipelined table */

select deptno, dname from table(SPTest.getDept('NEW YORK')) order by deptno;

/*返回cursor*/

select SPTest.getDeptInfo(10) from dual;

/*返回具体值*/

select SPTest.getName(50) from dual;

Oracle中定义package以及存储过程的使用的更多相关文章

  1. oracle中job定时调用存储过程的实例

    使用job模拟定时从元数据表中抽取指定数据进入目标表的过程. 一.创建元数据表 --create table test_origianl create table test_original_data ...

  2. 转://Oracle中定义者权限和调用者权限案例分析

    定义者权限:定义者权限指使用它所有者的权限,而不是当前用户来执行过程.因此,你可以限制用户执行的数据库操作,允许他们仅通过运行定义者权限的过程和函数访问数据.创建过程.函数和程序包的默认权限是定义者权 ...

  3. 分享知识-快乐自己:Oracle中定义及使用同义词

    Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...

  4. 查看ORACLE中正在运行的存储过程 kill

    1:登陆PLSQL Developer,写一个存储过程,向一个表中插入值,并运行存储过程 2:打开PLSQL Developer的命令窗口 .--终止procedure   11.select * f ...

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

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

  6. oracle中函数和存储过程的区别和联系

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

  7. oracle中的创建过程,函数,包

    一.创建存储过程 存储过程是在oracle中存取完成特定业务逻辑的代码块.存储过程是命名块,匿名块不存在数据库中,命名块会存储到数据库中,匿名块每次运行都需要提前编译,命名块一次存储,只会编译一次.命 ...

  8. .Net处理Oracle中Clob类型字段总结

    最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的 ...

  9. 关于oracle中数据类型的选择

    由于是初学,犯了如下错误: 生成表的主键id时,用当前时间的毫秒值.而在oracle中定义主键id时,用的数据类型是char(32).在mybatis中通过id取数据怎么也取不出来.想了好几天,本来以 ...

随机推荐

  1. 利用DIV+CSS制作网页过程中常用的基本概念及标签使

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  2. CentOS 6.4安装Kangle面板

    kangle web server一键安装包是一个用Linux Shell编写的可以为CentOS 6 VPS(VDS)或独立主机安装kangle web server(kangle,easypane ...

  3. SQL Server存储过程(转载)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  4. 在VS中快速查看文件被谁签出

    步骤如下: 1 在VS中的菜单上单击鼠标右键,然后选择显示“源代码管理” 2 选中要查看的文件后,在源代码管理中单击“属性” 3 打开第2个标签页“Check Out Status”,可以看到签出人等 ...

  5. wampserver php多版本5.2--5.6和apche2.2/2.4

    一.准备 wampserver2.5 php5各版本 php5.2到php5.6 apache2.2和apache2.4 二.安装 先成功安装wampserver2.5,如果安装不成功,多是vc11没 ...

  6. WCF全面解析第一章 WCF 简介

    1.WCF中的 "A","B","C" 介绍 我们先看个生活中的例子,某一天,公司的领导让你去送一份合同文件,送文件的过程你可以选择的交通方 ...

  7. a 标签 跳转4种类型

    <a href=''  target=''>中的target有4种参数: '_self'   ,  '_parent'   ,  '_top'    和  '_blank' 在没有使用框架 ...

  8. 史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

    书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战> ...

  9. 008-python基础-数据类型

    一.基本数据类型: 数字 int 字符串 str 布尔值 bool      真或假 1或0 列表 list 元组 tuple    (不可变列表) 字典 dict       (无序)

  10. 一幅图证明chrome的由来和目的