Oracle中定义package以及存储过程的使用
使用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以及存储过程的使用的更多相关文章
- oracle中job定时调用存储过程的实例
使用job模拟定时从元数据表中抽取指定数据进入目标表的过程. 一.创建元数据表 --create table test_origianl create table test_original_data ...
- 转://Oracle中定义者权限和调用者权限案例分析
定义者权限:定义者权限指使用它所有者的权限,而不是当前用户来执行过程.因此,你可以限制用户执行的数据库操作,允许他们仅通过运行定义者权限的过程和函数访问数据.创建过程.函数和程序包的默认权限是定义者权 ...
- 分享知识-快乐自己:Oracle中定义及使用同义词
Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...
- 查看ORACLE中正在运行的存储过程 kill
1:登陆PLSQL Developer,写一个存储过程,向一个表中插入值,并运行存储过程 2:打开PLSQL Developer的命令窗口 .--终止procedure 11.select * f ...
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
- oracle中函数和存储过程的区别和联系
oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...
- oracle中的创建过程,函数,包
一.创建存储过程 存储过程是在oracle中存取完成特定业务逻辑的代码块.存储过程是命名块,匿名块不存在数据库中,命名块会存储到数据库中,匿名块每次运行都需要提前编译,命名块一次存储,只会编译一次.命 ...
- .Net处理Oracle中Clob类型字段总结
最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的 ...
- 关于oracle中数据类型的选择
由于是初学,犯了如下错误: 生成表的主键id时,用当前时间的毫秒值.而在oracle中定义主键id时,用的数据类型是char(32).在mybatis中通过id取数据怎么也取不出来.想了好几天,本来以 ...
随机推荐
- Tomcat启动过程(一):从BootStrap到EndPonit
Tomcat版本tomcat6.0.44观察catalina.sh文件,启动入口:org.apache.catalina.startup.Bootstrap,该类main方法执行下面三个方法----- ...
- 解决DataGridView在多线程中无法显示滚动条的问题
在多线程中对DataGridView指定 DataSource 来填充数据,更新数据的时候,会导致DataGridView出现假死,显示错误或者滚动条无法显示的问题,在保证了DataGridView的 ...
- css半透明
filter:alpha(opacity=80); /*支持 IE 浏览器*/-moz-opacity:0.80; /*支持 FireFox 浏览器*/opacity:0.80; /*支持 Chrom ...
- [原]Python Web部署方式总结
不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...
- ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供
一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...
- C# 修改IE 源代码参照样例
using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; ...
- C#高级功能(二)LINQ 和Enumerable类
介绍LINQ之前先介绍一下枚举器 Iterator:枚举器如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.我们将以创建一个简单化的 ...
- Learning Scrapy笔记(五)- Scrapy登录网站
摘要:介绍了使用Scrapy登录简单网站的流程,不涉及验证码破解 简单登录 很多时候,你都会发现你需要爬取数据的网站都有一个登录机制,大多数情况下,都要求你输入正确的用户名和密码.现在就模拟这种情况, ...
- 4.python中的用户交互
学习完如何写'hello world'之后,我们还是不太满意,因为这样代码就写死了,以后运行的时候都只打印一局固定的话而已. 但是,我想在程序运行后,自己手动输入内容怎么办,此时就要学习如何使用用户交 ...
- PIL不能关闭文件的解决方案
今天写了一个能指定图片尺寸,以及比例 来搜索分类图片的Python脚本.为了读取多个格式的文件的头,采用了Python PIL库. im = PIL.Image.open(imPath) if im的 ...