PL/SQL基础:结构、变量处理——PL/SQL教程(一)

42 篇文章 8 订阅
30 篇文章 9 订阅

什么是PL/SQL

​ 许多时候我们会利用结构化查询语言(SQL)来访问和操作关系型数据库。这种语言的特点就是非过程化。也就是说使用的时候不用指明执行的具体方法和途径,即不用关注任何的实现细节。但这种语言也有一个问题,就是在某些情况下满足不了复杂业务流程的需求。
​ 所以就出现了PL/SQL,Oracle的PL/SQL语言正是完美的解决了这个问题,也就是过程化语言。和JAVA、C#等语言一样可以关注细节,用它可以实现复杂的业务逻辑。

PL/SQL的优点

​ 使用PL/SQL可以编写具有很多高级功能的程序,虽然这些功能可以通过多个SQL语句来完成同样的功能,但是PL/SQL具有以下优点:

  • 使一组语句功能形成模块化程序开发
  • 使用过程性语言控制程序结构
  • 可以对程序中的错误进行处理
  • 具有较好的可移植性
  • 集成在数据中,调用更快
  • 减少了网络的交互,有助于提高程序的性能

PL/SQL提供的新特性

PL/SQL提供了一些新的特性,可以进行复杂的信息处理

  1. 软件包
  2. 触发器
  3. 存储过程
  4. 函数
  5. 异常处理

PL/SQL可以使用所有的SQL数据操作,游标控制和事务控制命令,以及所有的SQL函数和运算符。PL/SQL完全支持SQL数据类型

PL/SQL块的基本结构

PL/SQL中起作用的部分都是由基本块组成的:基本块有四个
组成部分:
--声明部分:
	DECLARE -- 可选部分
	-- 变量、常量、游标、用户定义异常声明
-- 执行体开始部分
	BEGIN 	-- 必要部分
	-- SQL语句
	-- PL/SQL语句
-- 异常处理部分
	EXCEPTION -- 可选部分
	-- 程序出现异常时,捕捉异常并处理异常
-- 执行体结束
	END; -- 必要部分(结尾)

在PL/SQL中处理变量

  • 在声明部分声明和初始化变量
  • 在执行部分为变量赋新值,或在表达中使用变量
  • 在异常处理部分也可以使用变量
  • 通过参数把值传递到PL/SQL块中
  • 通过输出变量或者参数将值传出PL/SQL块
DECLARE
	-- 在declare部分声明变量,常量等
	-- 声明 变量的规范:  变量名称 变量类型 [:=缺省值];
	v_deptno number;
BEGIN
	-- 在 begin部分可以写 SQL语句,PL/SQL语句
	-- 在 begin部分中可以使用declare部分声明的变量,常量
	dbms_output.put_line('欢迎使用PL/SQL,执行查询语句之前,v_deptno=' || v_deptno);
	-- dbms_output.put_line();是输出语句,单引号包起来的将原封不动的给我们,|| 是拼接符
	select deptno into v_deptno from emp where empno = 7369;-- PL/SQL语句
	-- 把查询语句查询的结果赋值给v_deptno这个变量
	dbms_output.put_line('执行查询语句之后,v_deptno=' || v_deptno);
	delete from emp where deptno = v_daptno;
	delete from emp where deptno = v_daptno;
END;

在PL/SQL中处理变量

record类型

declare
    -- 声明记录类型
    type aaa is record(
        empno number(4),
        ename varchar2(50),
        sal number(4)
    ); -- 这TM不就跟我们创建表一样吗?只是不写约束
    --使用记录类型来声明变量
    aaa_info aaa; -- aaa_info 是我取得变量名,aaa是我上面声明的记录类型。
begin
	-- 给记录类型的变量赋值,只有类型中声明好的字段,才可以访问该字段
	
	select empno,ename,sal into aaa_info  from emp where empno=7
	aaa_info.empno:=10;
	aaa_info.ename:='张三';
	aaa_info.sal:=8000;
end;
/*
recode类型是由多个组件组成的一种类型,包含一个或多个组件,
每一个组件称为一个域(fiele),域的数据类型可以是简单变量类型或是table类型。
在使用record变量时把多个域的集合作为一个逻辑单元使用,对记录类型变量(%type)赋值或
引用,都需要使用‘记录变量.域名’的方式来实现。主要用于从表中取出查询到的行数据。

记录类型可以包含一个或多个域,每个域相当于记录类型变量的一个属性。
在使用记录变量类型时,实际上是对记录类型变量的属性进行操作。每个域
都可以是不同的数据类型,存放不同类型的数据。
*/

%type和%rowtype

/*
除了可以使用已经确定的类型来声明变量,还可以使用%type和%rowtype来作为变量的类型。
当使用%type来声明变量的时候,%type的前缀可以是一个前面已经声明的简单类型的量,
也可以是一个表的字段名称。
*/ 
declare
 	a number(4); -- 这tm就是简单变量
 	b a%type; -- %type 也tm可以这么用
begin

end;

-- 还能特么这么用
declare
 	a emp.empno%type; -- a为我的变量名,emp是我的表名,emp.empno是我表中的字段。后面加个%type,意思就是用emp表中empno这个字段的数据类型作为变量名a的数据类型。
begin

end;

/*
%rowtype 前缀可以是一个表名,也可以是前面声明的一个记录类型的变量(该变量必须参照一个表,而不是自定义的记录类型)
*/
declare
    --e是我取的变量名,emp是我的表 row是行,type是类型。那rowtype就是所有行的类型
    -- 那这里的emp%rowtype 就是表示 e可以用emp表里行数据中的所有字段
    e emp%rowtype;
    -- 在使用%rowtype的时候,Oracle做了两件事:
    -- 1.用emp表中的字段及其类型来声明了一种记录类型
    -- 2.用这种记录来声明变量
begin
    select * into e  from emp where empno=7499;
    dbms_output.put_line(e.ename||e.sal);
end;


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值