搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
IO 重定向的Hook和对抗_hook io重定向
2
python比较炫酷的代码,python漂亮gui界面模板_python 好看的ui界面
3
不讲武德,能怼哭你的Chatgpt
4
WPA加密的四次握手过程_wpa4
5
AI写作新纪元:创新技术引领内容创作
6
文本特征提取_ImageDT图匠数据联合华中师范提出低质退化文本识别算法PlugNet,论文被计算机视觉三大顶级会议之一的ECCV2020接收...
7
宝塔面板如何设置SSL访问HTTPS_宝塔点击ssl跳至首页
8
大模型的 5 月:热闹的 30 天和鸿沟边缘
9
【Java核心能力】RocketMQ 针对消息有序和消息积压的处理_异步补偿rocketmq ,消息积压,消费
10
算法分享系列No.9--出现次数的TopK问题
当前位置:
article
> 正文
oracle plsql高级编程 一 集合_oracle plsql编程中申明一个集合参数
作者:知新_RL | 2024-07-02 18:48:29
赞
踩
oracle plsql编程中申明一个集合参数
1.1 索引表
索引表是将数据保存在内存中!!!
1.1.1 定义索引表
-- 定义记录集
TYPE yang_rec IS RECORD( ename varchar2(30), eid NUMBER );
-- 定义索引表类型
TYPE yang_tab IS TABLE OF yang_rec INDEX BY BINARY_INTEGER;
-- 定义索引表对象的实例
test_tab yang_tab;
1.1.2 将条目插入到索引表中
索引表中的每个元素都由一个唯一的整型值(索引)标识。引用表中的值时,必须提供该值的索引。
索引的范围:1 ---- 2147483647,索引值可以不连续,同时PL/SQL并不为没有使用的条目预留空间。
例如:
DECLARE
CURSOR all_emps IS SELECT * FROM employee ORDER by emp_id;
TYPE emp_table IS TABLE OF employee%ROWTYPE INDEX BY BINARY_INTEGER;
emps emp_table;
emps_max BINARY_INTEGER;
BEGIN
emps_max := 0;
FOR emp IN all_emps LOOP
emps_max := emps_max + 1;
emps(emps_max).emp_id := emp.emp_id;
emps(emps_max).emp_name := emp.emp_name;
END LOOP;
END;
/
1.1.3 对索引表中进行操作
1) 插入:见上例。
2) 引用:
IF emps.EXIST(10) THEN
DBMS_OUTPUT.PUT_LINE('存在第10条记录。');
END IF;
3) 修改:
修改emps 表中的第100个条目:
emps(100).emp_name := 'yang linker';
4) 删除:
-- 删除emps 表中的第100个条目:
emps.DELETE(100);
PL/SQL 高级编程
第 4 页 共 4 页
-- 删除emps 表中的从1到100的条目:
emps.DELETE(1, 100);
-- 删除emps 表中的的所有条目:
emps.DELETE;
1.1.4 索引表中的函数
1) count:返回表的条目数量:
num_rows := emps.COUNT;
2) EXISTS:如果指定的条目存在,则返回为真;否则为假。
IF emps.EXIST(10) THEN
DBMS_OUTPUT.PUT_LINE('存在第10条记录。');
END IF;
3) LIMIT:该方法返回集合可以包含的最大元素数目。只有变长数组才有上限。将LIMIT 用于嵌套表和索引
表时,其返回为NULL。
4) FRIST:该方法返回集合中使用的最小的索引值。
5) LAST:该方法返回集合中使用的最大的索引值。
6) NEXT:该方法返回集合中当前使用的下一个索引值。
7) PRIOR:该方法返回集合中当前使用的上一个索引值。
8) DELETE:删除集合中的条目,见前例。
9) TRIM:从集合的尾部删除一个或多个条目,无返回值,只适用于变长数组和嵌套表。
emps.TRIM(1); -- 从集合的尾部删除一个条目
emps.TRIM(3); -- 从集合的尾部删除三个条目
10) EXTEND:在集合的尾部添加条目或复制已有的条目,只适用于变长数组和嵌套表。
emps.EXTEND(1); -- 从集合的尾部添加一个条目
emps.EXTEND(3); -- 从集合的尾部添加三个条目
emps.EXTEND(1, 3);-- 复制集合的第三个条目,并将其添加到表的末尾。
1.2 嵌套表
将数据保存在内存中!!!
嵌套表是一个无序记录集合。
检索数据库中的嵌套表时,条目的索引是连续的,不能象索引表那样随意跳过索引值。
需要使用构造函数初始化嵌套表。
嵌套表不能是以下数据类型:
BOOLEAN, NCHAR, NCLOB, NVARCHAR2, REF CURSOR, TABLE, VARRAY, NOT NULL。
嵌套表的定义和索引表类似,但不能使用INDEX BY 子句。
1.2.1 初始化嵌套表
必须使用构造函数初始化嵌套表后,才能给它添加条目!
-- 定义索引表类型
TYPE emp_tab IS TABLE OF emp%ROWTYPE;
-- 定义索引表对象的实例
PL/SQL 高级编程
第 5 页 共 5 页
emps emp_tab;
-- 初始化嵌套表
emps := emp_tab();
1.2.2 扩展嵌套表
利用 EXTEND 来扩展嵌套表的数据于内存。
DECLARE
CURSOR all_emps IS SELECT * FROM emp ORDER BY empno;
TYPE emp_table IS TABLE OF emp%ROWTYPE;
emps emp_table;
I PLS_INTEGER;
l_count PLS_INTEGER;
BEGIN
l_count := 0;
emps := emp_table(); -- 初始化嵌套表并产生一条空记录
FOR c1 IN all_emps LOOP
l_count := l_count + 1;
emps.EXTEND;
emps(l_count).empno := c1.empno;
emps(l_count).ename := c1.ename;
emps(l_count).job := c1.job;
emps(l_count).mgr := c1.mgr;
emps(l_count).hiredate := c1.hiredate;
emps(l_count).sal := c1.sal;
emps(l_count).comm := c1.comm;
emps(l_count).deptno := c1.deptno;
END LOOP;
-- clone the first entry five times
emps.EXTEND(5,1);
FOR i IN 1..l_count+5 LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(emps(i).empno) || ' ' || mps(i).ename);
END LOOP;
END;
/
1.2.3 删除嵌套表中的条目
1) DELETE 方法:
emps.DELETE(10); -- 删除嵌套表中的第10个条目。
注意:在删除嵌套表中的条目后,嵌套表中的条目并没有重新编号,还可以继续使用。
2) TRIM 方法:
TRIM方法是在表的末尾删除指定数目的条目。
TRIM方法只能用于嵌套表和变长数组。
DECLARE
CURSOR all_emps IS SELECT * FROM emp ORDER BY empno;
TYPE emp_table IS TABLE OF emp%ROWTYPE;
emps emp_table;
i PLS_INTEGER;
l_count PLS_INTEGER;
BEGIN
PL/SQL 高级编程
第 6 页 共 6 页
l_count := 0;
-- 初始化嵌套表并产生一条空记录
emps := emp_table();
FOR c1 IN all_emps LOOP
l_count := l_count + 1;
emps.EXTEND;
emps(l_count).empno := c1.empno;
emps(l_count).ename := c1.ename;
emps(l_count).job := c1.job;
emps(l_count).mgr := c1.mgr;
emps(l_count).hiredate := c1.hiredate;
emps(l_count).sal := c1.sal;
emps(l_count).comm := c1.comm;
emps(l_count).deptno := c1.deptno;
END LOOP;
-- clone the first entry five times
emps.EXTEND(5,1);
-- Trim off the five clones of entry #1
emps.TRIM(5);
-- Delete the first entry
emps.DELETE(1);
FOR i IN 1..l_count+5 LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(emps(i).empno) || ' ' || emps(i).ename);
END LOOP;
END;
/
注意:调试以上代码,并注意错误表达!!!
1.3 变长数组
变长数组与嵌套表类似,但变长数组的最大长度是固定的。
变长数组与嵌套表一样需要初始化。
1.3.1 定义变长数组
-- 定义最大长度为100 的变长数组
TYPE type_name IS VARRAY(100) OF VARCHAR2(20);
1.3.2 扩展变长数组
类似于嵌套表,但不能超过最大长度。例程类似于嵌套表的例程。
1.4 批绑定
PL/SQL 批绑定是Oracle8i中的新功能。
1) 使用 BULK COLLECT
2) 使用 FORALL
PL/SQL 高级编程
第 7 页 共 7 页
例程:
DECLARE
CURSOR c1 IS SELECT empno, ename FROM emp;
TYPE eno_tab IS TABLE OF emp.empno%TYPE;
TYPE ename_tab IS TABLE OF emp.ename%TYPE;
l_enos eno_tab;
l_enames ename_tab;
BEGIN
OPEN c1;
FETCH c1 BULK COLLECT INTO l_enos, l_enames;
CLOSE C1;
FOR i IN 1..l_enos.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(l_enos(i)) || ' ' || l_enames(i));
END LOOP;
FORALL i IN l_enos.FIRST .. l_enos.LAST
UPDATE emp SET ename = l_enames(i) WHERE empno = l_enos(i);
END;
/
1.5 集合的异常处理
异 常 原 因
COLLECTION_IS_NULL 在构造函数初始化集合之前试图使用它
NO_DATA_FOUND 试图访问集合中不存在的条目
SUBCRIPT_BEYOND_COUNT 使用的下标超过了集合当前的元素数目
SUBCRIPT_OUTSIDE_LIMIT 变长数组中使用的下标大于该变长数组声明中规定的最大值
VALUE_ERROR 使用一个不能转换为整形的下标
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/780564
推荐阅读
article
免费
数据库
(
SQLite
、
Berkeley
DB、
PostgreSQL
、
MySQL
、
Firebird
...
SQLite
数据库
是中小站点CMS的最佳选择
SQLite
是一个类似Access的轻量级
数据库
系统,但是更小、更快、容量...
赞
踩
article
LATERAL
横向派生表_
lateral
join
oracle
...
参考董旭阳TonyDong的博客,网址:https://blog.csdn.net/horses/article/det...
赞
踩
article
Oracle
VM
VirtualBox
虚拟机
加载
USB
硬盘
_
vbox
虚拟机
挂载 usb 移动硬...
Oracle
VM
VirtualBox
虚拟器加载
USB
硬盘
制作:狂龙骄子整理:2014-08-31 22:00最近自...
赞
踩
article
【
Oracle
】
调用
HTTP
接口...
在oracle中发起http请求对oracle压力比较大,建议不要将完整报文都丢给oracle进行
调用
。建议的方式是,请...
赞
踩
article
oracle
监听
配置_
oracle
监听
配置...
一 静态
监听
配置:在配置文件中加入,需要添加sid
监听
的配置静态
监听
注册成功,下方出现unkown的标识(表示静态
监听
注...
赞
踩
article
oracle
clustr,
Oracle
CLUSTER
_
INTERCONNECTS
参数详解...
This note attempts to clarify the cluster_interconnects para...
赞
踩
article
oracle
数据
集
cat
,Oracle...
在给
数据
库打补丁的时候,看文档中都有一个步骤"SQL> @
cat
bundle.sql psu apply",那么这个脚本...
赞
踩
article
Oracle
OAC
系列:
数据
集
关联
so
easy
_如何选取
数据
集中相
关联
的
数据
...
前面两部分我们学习了快速进行
数据
分析和
数据
集管理,对
OAC
(
数据
分析)平台有了初步的认识。那么我们将多个
数据
集添加到某个...
赞
踩
article
主流
数据
库(
SQL
Server
、My
sql
、
Oracle
)通过
sql
实现多行
数据
合为一行_
sql
多...
FOR XML是
SQL
Server
提供的一种功能,允许您将查询结果转换为 XML 格式。PATH模式则是其中一种灵...
赞
踩
article
Oracle
错误
总结及
问题
解决
ORA
_
ora
-00027...
ORA
错误
大全_
ora
-00027
ora
-00027 使用 Ctrl + F ...
赞
踩
article
Oracle
区块
链
表
,一个集中式的
区块
链
平台...
Oracle
区块
链
表
是一个具有防篡改功能的表,只能插入数据,同时提供了表级和行级的保留期限。
区块
链
表
中的所有行构成了一...
赞
踩
article
Oracle
Primavera
P6
导入
Excel
文件_
primavera
p6 用
excel
...
应工作需要,时将常用的Office
Excel
处理
导入
进P6系统,而
导入
过程中最关键的一步便是
导入
操作,这里特别解释...
赞
踩
article
oracle
merge
的使用...
Oracle的MERGE语句是一个功能强大的工具,允许用户在一个SQL语句中同时执行INSERT和UPDATE操作。通过...
赞
踩
article
Xshell
连接VM虚拟机
的
Centos7
遇到
的
问题及
解决办法
_用最简单
的
方法解决
xshell
or...
ifconfig 、 ping 、 虚拟机 、
xshell
、Centos_用最简单
的
方法解决
xshell
oracle
...
赞
踩
article
2023
年
中国
数据库
市场
440亿,云
数据库
四强(阿里、腾讯、亚马逊、
华为
),本地
数据库
四强(Orac...
近期IDC公布了
中国
关系型
数据库
市场
的数据,整体
市场
276亿人民币(38亿美元),其中公有云
数据库
市场
175亿人民币(2...
赞
踩
article
Oracle
(PLSQL) +
MySQL
[
存储
过程
和函数]_
plsql
存储
过程
临时表...
学习笔记_
plsql
存储
过程
临时表
plsql
存储
过程
临时表 ...
赞
踩
article
Oracle
Performance
Tuning
1
1
g2 (2-
1
)...
在windows live writer中编辑的时候,以及预览的时候都是整整齐齐的,但是一上传到博客中就变得乌七八黑了 ...
赞
踩
article
数据
集合
oracle
,
oracle
集合
...
oracle
集合
1初识
集合
集合
是
oracle
中的一种数据类型 存放一组数据类型相同的数据
集合
组成由下标和值组成下标的类型...
赞
踩
article
Oracle
数据
集
...
Oracle
在表与表之间取交
集
,差
集
关键字UNION, UNION ALL, INTERSECT, and MINUS...
赞
踩
相关标签
开源 免费 数据库
MySQL
PostgreSQL
Sqlite
Lateral
虚拟机
virtualbox
加载USB硬盘
加载U盘
oracle
http
数据库
oracle clustr
oracle数据集cat
bi
数据分析
数据建模
mysql
sqlserver
Oracle
ORA
Oracle错误
Oracle错误大全
区块链表
区块链