没有合适的资源?快使用搜索试试~ 我知道了~
首页PL/SQL进阶指南:数据操作、事务与控制结构详解
PL/SQL进阶指南:数据操作、事务与控制结构详解
需积分: 10 2 下载量 137 浏览量
更新于2024-07-22
收藏 668KB PDF 举报
"这是一份详尽的PL/SQL编程笔记,涵盖了PL/SQL语言的关键部分。首先,它介绍了如何有效地处理单行数据,包括使用标量变量和记录变量接收数据,以及在嵌套SELECT语句中的注意事项。接下来,笔记详细探讨了数据操作,如通过VALUES子句和子查询进行数据插入、更新和删除,以及SQL游标的使用,包括SQL属性的深入理解。 交易控制是另一个重要的主题,笔记列举了事务控制语句,确保数据的一致性和完整性。控制结构方面,包括条件分支(如简单、二重和多重条件判断,以及CASE语句的使用)以及循环结构(WHILE、for循环和嵌套循环)。复合数据类型如PL/SQL记录、集合(索引表、嵌套表、VARRAY和记录表)也被深入剖析,展示了如何在各种SQL语句中,如SELECT、INSERT、UPDATE和DELETE中应用这些数据结构。 此外,笔记还涵盖了PL/SQL的高级特性,如多级集合、二维嵌套表以及集合方法,如EXISTS、COUNT、LIMIT等函数的使用。这些功能在实际编程中能极大地提高效率和代码的可读性。这份笔记旨在帮助学习者更好地理解和掌握PL/SQL编程,无论是初学者还是进阶开发者都能从中获益匪浅。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/8656429/bg10.jpg)
<<end_loop>>
dbms_output.put_line('
循环结束
');
end;
5.3.2. Null
Null
,不会执行任何操作,并且会直接将控制传递到下一条语句。
declare
v_sal emp.sal%type;
v_ename emp.ename%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
if v_sal<3000 then
update emp set comm=sal*0.1 where ename=v_ename;
else
null;
end if;
end;
6.
复合数据类型
6.1.
定义
PL/SQL
记录
自定义
PL/SQL
记录
:
需要定义
PL/SQL
记录类型和记录变量
,identifier
用于指定记录变量名
type type_name is record(
field_declaration[,
field_declaration]...
);
identifier type_name;
declare
type emp_record_type is record(
name emp.ename%type,
salary em.sal%type,
dno emp.deptno%type);
emp_record emp_record_type;
使用
%rowtype
属性定义记录变量
:
可以基于表或视图定义记录变量
当使用
%ROWTYPE
属性定义记录变量时
,
记录成员个数
,
名称
,
类型与表或视图列的个数,
![](https://csdnimg.cn/release/download_crawler_static/8656429/bg11.jpg)
名称
,
类型完全相同
.
dept_record dept%rowtype;
emp_record emp%rowtype;
在
select into
语句中使用
PL/SQL
记录
在
select into
语句中使用记录变量
declare
type emp_record_type is record(
name emp.ename%type,
salary em.sal%type,
dno emp.deptno%type);
emp_record emp_record_type;
begin
select ename,sal,deptno into emp_record from emp where empno=&no;
dbms_output.put_line(emp_record.name);
end;
6.2.
在
select into
语句中使用记录成员
declare
type emp_record_type is record(
name emp.ename%type salary emp.sal%type,
dna emp.deptno%type);
emp_record emp_record_type;
begin
select ename,sal into emp_record.name,emp_record.salary from emp where
empno=&no;
dbms_output.put_line(emp_record.name);
end;
6.3.
在
insert
语句中使用
PL/SQL
记录
在
VALUES
子句中使用记录变量
declare
dept_record dept%rowtype;
begin
dept_record.deptno:=50;
dept_record.dname:='administrator';
dept_record.loc:='beijing';
insert int dept values dept_record;
end;
![](https://csdnimg.cn/release/download_crawler_static/8656429/bg12.jpg)
在
VALUES
子句中使用记录成员
declare
dept_record dept%rowtype;
begin
dept_record.deptno:=60;
dept_record.dname:='sales';
insert into dept (deptno,dname) values (dept_record.deptno,dept_record.dname);
end;
6.4.
在
UPDATE
语句中使用
PL/SQL
记录
在
SET
子句中使用记录变量
declare
dept_record dept%rowtype;
begin
dept_record.deptno:=30;
dept_record.dnama:='sales';
dept_record.loc:='shanghai';
update dept set row=dept_record where deptno=30;
end;
在
SET
子句中使用记录成员
declare
dept_record dept%rowtype;
begin
dept_record.loc:='guangzhou';
update dept set loc=dept_record.loc where deptno=10;
end;
6.5.
在
DELETE
语句中使用
PL/SQL
记录
只能在
DELETE
语句中的
WHERE
子句中使用记录成员
declare
dept_record dept%rowtype;
begin
![](https://csdnimg.cn/release/download_crawler_static/8656429/bg13.jpg)
dept_record.deptno:=50;
delete from dept where deptno=dept_record.deptno;
end;
7. pl/sql
集合
处理单行单列数据
,
可以使用标量变量
,
处理单行多列的数据,可以使用
PL/SQL
记录
处理单列多行数据
,
可以使用
PL/SQL
集合
PL/SQL
集合类型类似于高级语言数组的一种复合数据类型
包括:索引表
(PL/SQL
表
)
,嵌套表
(NESTED TABLE)
,变长数组
(VARRAY)
三种
7.1.
索引表
PL/SQL
表,元素个数没有限制,并且下标可以是负值
定义索引表
:
type type_name is table of element_type [not null] index by key_type;
identifier type_name;
在索引表中使用
BINARY_INTEGER
和
PLS_INTEGER
declare
type ename_table_type is table of emp.ename%type index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(-1) from emp where empno=&no;
dbms_output.put_line('
雇员名
:'||ename_table(-1));
end;
在索引表中使用
VARCHAR2
declare
type area_table_type is table of number index by varchar2(10);
area_table area_table_type;
begin
area_table('
北京
'):=1;
area_table('
上海
'):=2;
![](https://csdnimg.cn/release/download_crawler_static/8656429/bg14.jpg)
area_table('
广州
'):=3;
dbms_output.put_line('
第一个元素
:'||area_table.first);
dbms_output.put_line('
最后一个元素
:'||area_table.last);
end;
7.2.
嵌套表
元素个数从
1
开始,并且元素个数没有限制
定义嵌套表
type type_name is table of element_type;
identifier type_name;
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type:=ename_table_type('A','A');
在
PL/SQL
块中使用嵌套表,使用嵌套表变量时,必须首先使用构造方法初始化嵌套表变量 ,
然后才能在块内引用嵌套表元素
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type;
begin
ename_table:=ename_table_type('mary','mary','mary');
select ename into ename_table(2) from emp where empno=&no;
dbms_output.put_line('
雇员名
:'||ename_table(2));
end;
7.2.1.
在表列中使用嵌套表
:
在表列中使用嵌套表类型,必须首先使用
CREATE TYPE
命令建立嵌套表类型。
当使用嵌套表类型作为表列的数据类型时,必须要为嵌套表列指定专门的存储表。
create type phone_type is table of varchar2(20);
/
create table employee(
id number(4),
name varchar2(10),
sal number(6,2),
phone phone_type
)nested table phone store as phone_table;
剩余134页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/9335c35f41fb44dab4d720ce28352cf4_u012744999.jpg!1)
请叫我毒蘑菇
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 计算机人脸表情动画技术发展综述
- 关系数据库的关键字搜索技术综述:模型、架构与未来趋势
- 迭代自适应逆滤波在语音情感识别中的应用
- 概念知识树在旅游领域智能分析中的应用
- 构建is-a层次与OWL本体集成:理论与算法
- 基于语义元的相似度计算方法研究:改进与有效性验证
- 网格梯度多密度聚类算法:去噪与高效聚类
- 网格服务工作流动态调度算法PGSWA研究
- 突发事件连锁反应网络模型与应急预警分析
- BA网络上的病毒营销与网站推广仿真研究
- 离散HSMM故障预测模型:有效提升系统状态预测
- 煤矿安全评价:信息融合与可拓理论的应用
- 多维度Petri网工作流模型MD_WFN:统一建模与应用研究
- 面向过程追踪的知识安全描述方法
- 基于收益的软件过程资源调度优化策略
- 多核环境下基于数据流Java的Web服务器优化实现提升性能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)