搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
酷酷是懒虫
这个屌丝很懒,什么也没留下!
关注作者
热门标签
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
iOS:多效果的CategoryView_ios jxcategorytitleview加个数角标
2
Kafka相关问题及答案_头歌kafka入门篇答案
3
Java大数据培训视频全套教程-Git教程(34)-马克-专题视频课程
4
完美解决 ubuntu 遇到 sudo: pip: command not found_sudo: pip:找不到命令
5
解决Unable to connect to Redis_unable to connect to redis server
6
Java项目【仿牛客网5-6】_仿牛客网代码
7
【华为OD笔试】2024D卷机考套题汇总【真实反馈,不断更新,限时免费】_od统一考试(2024年d卷)
8
PoC免写攻略_yakit编写poc
9
ubuntu14 安装ssh_ubuntu14安装ssh
10
2024最新Java面试真题解析,2024京东最新Java面试真题解析
当前位置:
article
> 正文
oracle plsql高级编程 一 集合_oracle的plsql案例
作者:酷酷是懒虫 | 2024-07-06 13:36:45
赞
踩
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/酷酷是懒虫/article/detail/792966
推荐阅读
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...
赞
踩
article
oracle
plsql
高级
编程
一
集合
_
oracle
plsql
编程
中申明
一
个
集合
参数...
1.1 索引表索引表是将数据保存在内存中!!!1.1.1 定义索引表-- 定义记录集TYPE yang_rec IS R...
赞
踩
article
Oracle
、My
SQL
、PostGre
SQL
、
SQL
Server
-查询每秒
事务
数_
数据库
事务
统计...
在做 db benchmarks 时,qps、tps 是衡量
数据库
性能的关键指标,TPS : Transactions ...
赞
踩
article
Oracle
中
重新
编译
无效的
存储
过程
, 或函数、触发器等对象_
oracle
数据库
存储
过程
重新
编译
...
Oracle
中的
存储
过程
在有些情况下会变成失效状态,在 PL/SQL Developer 中该
存储
过程
的图标左上角显示...
赞
踩
article
oracle
通过
dblink
和
触发器
实现
数据
同步
_
oracle
基于
dblink
的
触发器
...
本文实现功能
数据
库实例a,b,a中a1表,b中b1表在a实例中创建
dblink
连接到b实例,在a中插入,更新,删除a1数...
赞
踩
article
oracle
dblink
-
数据
同步(使用
trigger
)...
物理上存放于网络的多个Oracle
数据
库,逻辑上可以看成一个单个的大
数据
库。 用户可以通过网络对异地
数据
库中的
数据
同时进...
赞
踩
article
oracle
禁止
dblink
,
oracle
触发器
实现
禁止
在
数据库
中创建
dblink
---通过...
CREATE OR REPLACE TRIGGER no_create_
dblink
BEFORE DDL ON DATA...
赞
踩
article
oracle
dblink
+
trigger
触发器
实现两个
库
数据
同步
_
oracle
双
库
同步
...
oracle
触发器
trigger
与
dblink
实现数据迁移_
oracle
双
库
同步
oracle
双
库
同步
...
赞
踩
article
Oracle
使用
DBLink
技术
同步
异地
数据库
_
oracle
异地
数据库
数据表
同步
...
Oracle
DBLink
介绍地址https://docs.
oracle
.com/cd/B19306_01/server....
赞
踩
article
PLSQL
Devolper
[
自定义
快捷键
和代码块]_pl
sql
美化
sql
快捷键
...
pl
sql
自定义
快捷键
以及代码块_pl
sql
美化
sql
快捷键
pl
sql
美化
sql
快捷键
...
赞
踩
article
PLSQL
、
DBeaver
、
Notepad
++常用
快捷键
_pl
sql
格式化
sql
快捷键
...
【代码】
PLSQL
、
DBeaver
、
Notepad
++常用
快捷键
。_pl
sql
格式化
sql
快捷键
pl
sql
格式化
sql
快...
赞
踩
article
Dbeaver
配置
oracle
数据库
的步骤_
dbeaver
oracle
驱动...
1.
Dbeaver
作为开源免费的
数据库
客户端,整体还是比较好用的,链接mysql的操作还是比较简单的,但是链接orac...
赞
踩
article
Navicat
/
dbeaver
连接
oracle
XE
可视化
操作_
navicat
链接
oracle
...
之前就下载了
oracle
可视化
软件,但一直连不上,后来发现是
XE
版本和普通版本的设置不太一样。首先在里面吧oci.dll...
赞
踩
article
一图搞定
Flink
Oracle
CDC 同步至
Paimon
(持续更新)_
flink
cdc pai...
本文以
Flink
1.18、FLink CDC 3.1为环境,配置
Flink
CDC 同步
Oracle
的数据至Paimo...
赞
踩
article
ORACLE
JOB
创建
及使用详解_
oracle
创建
job
...
都有哪些_
oracle
创建
job
oracle
创建
job
Oracle
job
有定时执...
赞
踩
相关标签
Linux
Xshell
oracle
数据库
华为
市场份额
云厂商
数据库开发
架构
sql
数据集合 oracle
编程
integer
table
delete
linker
mysql
postgresql
存储
object
schema
function
dependencies