ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解
ORACLE中RECORD、VARRAY、TAB、IS REF CURSOR LE的使用及实例详解
create or replace
procedure PRO_RECORD_ROW_TAB_EXAMPLE
IS
--记录一行二列的数据
type V_REC is RECORD(
FACT_NO char(4),
FACT_ODR_NO char(20)
);
--对变量进行实例化
V_REC1 V_REC;
--定义一个表示表中一行记录的变量
v_row1 odrm%rowtype;
----指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型。
--INDEX BY BINARY_INTEGER:指索引组织类型
TYPE V_TAB IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
---实例化变量
V_TAB1 V_TAB;
--存储单列多行
TYPE T_TAB_FACT_ODR_NO IS TABLE OF ODRM.FACT_ODR_NO%TYPE INDEX BY BINARY_INTEGER;
--实例化变量
VAR_FACT_ODR_NO T_TAB_FACT_ODR_NO;
-- 存储多列多行和ROWTYPE结合使用
TYPE T_TAB_ODRM IS TABLE OF ODRM%ROWTYPE INDEX BY BINARY_INTEGER ;
--实例化变量
var_odrm t_tab_odrm;
-- 存储多列多行和RECORD结合使用
TYPE T_TAB_rec IS TABLE OF v_rec INDEX BY BINARY_INTEGER ;
--实例化变量
var_odrm_rec T_TAB_rec;
--数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY(variable array,即可变数组
TYPE V_VARRAY IS VARRAY(5) OF VARCHAR2(25);
--实例化变量
varray_1 v_varray;
/*
像游标cursor一样,游标变量ref cursor指向指定查询结果集当前行。游标变量显得更加灵活因为其声明并不绑定指定查询。
其主要运用于PLSQL函数或存储过程以及其他编程语言java等程序之间作为参数传递。
不像游标的一点,游标变量没有参数。
游标变量具有以下属性:
(%FOUND, %NOTFOUND, %ISOPEN, and %ROWCOUNT)
游标变量又分为强类型strong(with a return type)和弱类型(with no return type)
*/
---强类型
TYPE MYCURA IS REF CURSOR RETURN ODRM%ROWTYPE;
--实例化变量
ref_cur mycura;
v_row_type odrm%rowtype;
--强类型
TYPE REF_CURSOR IS REF CURSOR RETURN V_REC;
--实例化变量
ref_cur1 ref_cursor;
---弱类型
TYPE REF_CURSOR1 IS REF CURSOR ;
--实例化变量
ref_cur2 ref_cursor1;
v_fact_odr_no odrm.fact_odr_no%type;
---游标变量 与记录配合使用
TYPE REF_CURSOR2 IS REF CURSOR ;
--实例化变量
ref_cur3 ref_cursor2;
begin
select FACT_NO,FACT_ODR_NO into V_REC1
from ODRM
where rownum =1;
select * into v_row1
from ODRM
where rownum =1;
V_TAB1(-1) :='-1';
v_tab1(1) :=' 1';
---BULK COLLECT :指是一个成批聚合类型,简单的来说 , 它可以存储一个多行多列存储类型,采用BULK COLLECT可以将查询结果一次性地加载到集合中。
--采用bulkcollect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。
select FACT_ODR_NO
bulk collect into var_fact_odr_no
from ODRM
where rownum <=10;
for X in VAR_FACT_ODR_NO.first..VAR_FACT_ODR_NO.last LOOP
DBMS_OUTPUT.PUT_LINE(var_fact_odr_no(x));
end loop;
select *
bulk collect into var_odrm
from ODRM
where rownum <=11;
for X in 1..VAR_ODRM.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(VAR_odrm(x).fact_no||','||var_odrm(x).fact_odr_no);
END LOOP;
select fact_no,FACT_ODR_NO
bulk collect into var_odrm_rec
from ODRM
where rownum <=10;
for X in var_odrm_rec.first..var_odrm_rec.last LOOP
DBMS_OUTPUT.PUT_LINE(VAR_FACT_ODR_NO(X));
end loop;
varray_1 := v_varray('1','2','3','4','5');
dbms_output.put_line(varray_1(1) );
VARRAY_1(5) := '500';
dbms_output.put_line(varray_1(5));
open ref_cur for select * from odrm where rownum <12;
loop
fetch ref_cur into v_row_type;
exit when ref_cur%notfound;
dbms_output.put_line(v_row_type.fact_no ||','||v_row_type.fact_odr_no);
end loop;
close ref_cur;
--
open ref_cur1 for select fact_no,fact_odr_no from odrm where rownum <12;
loop
fetch ref_cur1 into v_rec1;
exit when ref_cur1%notfound;
dbms_output.put_line(v_rec1.fact_odr_no || v_rec1.fact_no);
end loop;
close ref_cur1;
open ref_cur2 for select fact_odr_no from odrm where rownum <12;
loop
fetch ref_cur2 into v_fact_odr_no;
exit when ref_cur2%notfound;
dbms_output.put_line(v_fact_odr_no);
end loop;
close ref_cur2;
open ref_cur3 for select * from odrm where rownum <12;
loop
fetch ref_cur3 into v_row_type;
exit when ref_cur3%notfound;
dbms_output.put_line(v_row_type.fact_odr_no);
end loop;
close ref_cur3;
end;
ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解的更多相关文章
- ORACLE中RECORD、VARRAY、TABLE的使用详解(转)
原文地址:ORACLE中RECORD.VARRAY.TABLE的使用详解
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- Oracle排名函数(Rank)实例详解
这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下 --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应 ...
- JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解
在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...
- 【翻译】Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解)
[翻译]Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解) . . .
- 《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口
HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和Fi ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...
- java中List的用法和实例详解
java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...
随机推荐
- HyperLedger Fabric 多机部署(二)
启动各个节点: ./orderer order节点启动方式 ./peer node start peer节点启动方式 Admin@org1.example.com 使用hyperledger fabr ...
- 2015 Noip提高组 Day1
P2615 神奇的幻方 [题目描述] 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: ...
- 使用JMETER进行REST API测试
我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...
- HDU-1498-50years,50colors(最大匹配, 枚举)
链接:https://vjudge.net/problem/HDU-1498#author=634579757 题意: 撞气球游戏,一个n*n的矩阵中,有不同颜色的气球,气球的颜色最多50种(从1到5 ...
- build spark
Error : Failed to find Spark jars directory (/home/pl62716/spark-2.2.0-SNAPSHOT/assembly/target/scal ...
- github 新建一个分支
我能说今天在github上新建分支的时候懵逼了半天吗..为了下次不再懵逼,还是在这里记录一下吧.. 进入你的项目---code---Branch----点击那个倒三角-----你会发现一个输入框(这是 ...
- 我的grunt配置
module.exports = function(grunt) { // 配置. grunt.initConfig({ pkg: grunt.file.readJSON('package.json' ...
- mysql 取整
在mysql中,当处理数值时,会用到数值处理函数,如有一个float型数值2.13,你想只要整数2,那就需要下面的函数floor与round. floor:函数只返回整数部分,小数部分舍弃. ...
- [luogu 1967]货车运输
货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情 ...
- This file's format is not supported or you don't specify a correct format. 解决办法
string path = @"c:\请假统计表.xlsx"; Workbook workBook = new Workbook(); workBook.Open(path); A ...