PL/SQL之块结构和组成元素

PL/SQL之基础

一 SQL与PL/SQL

1 PL/SQL概念

PL/SQL 是一种高级数据库程序设计语言,该语言 专门用于在各种环境下对 ORACLE 数据库进行访问 。由于该语言 集成于数据库服务器中 所以 PL/SQL 代码可以对数据进行快速高效的处理。
PL/SQL是对 SQL 语言存储过程语言的扩展 从 ORACLE6 以后, ORACLE 的 RDBMS 附带了 PL/SQL 。它现在已经成为一种 过程处理语言 ,简称 PL/SQL 。目前的 PL/SQL 包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如 C 语言, JAVA 语言等)工具中的独立 引擎。可以将这两部分称为:数据库 PL/SQL 和工具PL/SQL 。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具 PL/SQL 另外还增加了用于支持工具(如 ORACLE Forms )的句法,如:在窗体上设置按钮等。

2 PL/SQL的好处

① 有利于客户端/服务器环境应用的运行
对于客户服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用 PL/SQL 进行编程, 将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时间。
② 适合于客户环境
PL/SQL由于分为数据库 PL/SQL 部分和工具 PL/SQL 。对于客户端来说, PL/SQL 可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL 部分,也可以向服务发 SQL 命令或激活服务器端的 PL/SQL 程序运行

3 PL/SQL可用的SQL语句

PL/SQL 是 ORACLE 系统的核心语言,现在 ORACLE 的许多部件都是由 PL/SQL 写成 。在 PL/SQL 中 可以使用的 SQL 语句有:INSERT UPDATE DELETE SELECT INTO COMMIT ROLLBACK SAVEPOINT 。
提示:在PL/SQL 中只能用 SQL 语句中的 DML 部分不能用 DDL 部分,如果要在 PL/SQL 中使用 DDL( 如CREATE table 等 的话,只能以动态的方式来使用。
① ORACLE 的 PL/SQL 组件在对 PL/SQL 程序进行解释时,同时对在其所使用的表名、列名及数据类型进行检查。
② PL/SQL 可以在 SQL*PLUS 中使用。
③ PL/SQL 可以在高级语言中使用。
④ PL/SQL 可以 在 ORACLE 的 开发工具中使用。
⑤ 其它开发工具也可以调用 PL/SQL 编写的过程和函数,如 Power Builder 等都可以调用服务器端的PL/SQL 过程。

4 运行PL/SQL程序

PL/SQL 程序的运行是通过 ORACLE 中的一个引擎来进行的。这个引擎可能在 ORACLE 的服务器端,也可能在 ORACLE 应用开发的客户端引擎执行 PL/SQL 中的过程性语句,然后将 SQL 语句发送给数据库服务器来执行。再将结果返回给执行端。

二 PL/SQL块结构和组成元素

1 PL/SQL块结构
PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分
PL/SQL块的结构如下:

DECLARE
/*声明部分 : 在此声明 PL/SQL 用到的变量 类型及游标,以及局部的存储过程和函数*/
BEGIN
/* 执行部分 : 过程及 SQL 语句 , 即程序的主要部分*/
EXCEPTION
/* 执行异常部分 : 错误处理*/
END

PL/SQL块分为三类:
(1)无名块:动态构造,只执行一次
(2)子程序 :存储在数据库中的 存储过程、函数 及包等。当在数据库上建立好后可以在其它程序中调用它们
(3)触发器 :当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

2 PL/SQL结构
(1)PL/SQL 块中可以包含子块;
(2)子块可以位于 PL/SQL 中的任何部分;
(3)子块也即 PL/SQL 中的一条命令;

3 标识符
PL/SQL程序设计中的标识符定义与 SQL 的标识符定义的要求相同。要求和限制有:
(1) 标识符名不能超过 30 字符;
(2) 第一个字符必须为字母;
(3) 不分大小 写;
(4) 不能用 减号
(5) 不能是 SQL 保留字。
提示:一般不要把变量名声明与表中字段名完全一样 如果这样可能得到不正确的结果
变量命名在 PL/SQL 中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到 要求。下面是 建议的命名方法
在这里插入图片描述
4 PL/SQL变量类型
(1)变量类型
在这里插入图片描述
在这里插入图片描述
(2)记录类型
记录类型是把逻辑相关 的数据作为一个单元存储起来 称作 PL/S QL RECORD 的域 ( FIELD),其作用是存放互不相同但逻辑相关的信息
定义记录类型语法如下

TYPE record_type IS RECORD(
	Field1 type1 [NOT NULL] [:= exp1 ],
	Field2 type2 [NOT NULL] [:= exp2 ],
	. . . . .
	Fieldn typen [NOT NULL] [:= expn ] )

案例:
在这里插入图片描述
提示

  1. DBMS_ OUTPUT.PUT_LINE 过程的功能类似于 Java 中的 System.out.println() 直接将输出结果送到
    标准输出中 .
  2. 在使用上述过程之前必须将 SQL * PLUS 的环境参数 SERVEROUTPUT 设置为 ON, 否则将看不到输出结果 set serveroutput on可以用 SELECT 语句对记录变量进行赋值 只要保证记录字段与查询结果列表中的字段相配即可 。
    (2)使用%Type
    定义一个变量,其数据类型与已经定义的某个数据变量类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE
    使用%TYPE 特性的优点在于:
    ① 所引用的数据库列的数据类型可以不必知道
    ② 所引用的数据库列的数据类型可以实时改变
    在这里插入图片描述
    (3)使用%ROWTYPE
    PL/SQL提供 %ROWTYPE 操作符 , 返回一个记录类型 , 其数据类型和数据库表的数据结构相一致
    使用%ROWTYPE 特性的优点在于:
    ① 所引用的数据库中列的个数和数据类型可以不必知道;
    ① 所引用的数据库中列的个数和数据类型可以实时改变。
    在这里插入图片描述
    (4)PL/SQL表
    PL/SQL程序可使用嵌套表类型创建具有一个或多个列和无限行的变量 , 这很像数据库中的表 . 声明嵌套表类型的一般语法如下 :
TYPE type_name IS TABLE OF
	datatype | {variable | table.column} % type | table%rowtype}

在这里插入图片描述
在这里插入图片描述
说明

  1. 在使用嵌套表之前必须先使用该集合的构造器初始化它 . PL/SQL 自动提供一个带有相同名字的构造器作为集合类型 .
  2. 嵌套表可以有任意数量的行 表的大小在必要时可动态地增加或减少 : extend(x) 方法添加 x 个空元素到集合末尾 ; trim(x) 方法为去掉集合末尾的 x 个元素
    (5)变量赋值
    在PL/SQL 编程中,变量赋值是一个值得注意的地方,它的语法如下:
    variable := expression
    variable 是一个 PL/SQL 变量 , expression 是一个 PL/SQL 表达式
    ① 字符及数字运算特点
    空值加数字仍是空值:NULL + < 数字 > = NULL
    空值加(连接)字符,结果为字符:NULL || < 字符串 > = < 字符串
    ② Boolean赋值
    只有true、false、nul三个值
    ③ 数据库赋值
    数据库赋值是 通过 SELECT 语句来完成的 ,每次执行 SELECT 语句就赋值一次, 一般要求被赋值的变量与SELECT 中的列名要一一对应 。不能把select语句中的列值赋给布尔变量。
    如:
DECLARE
	emp_id emp.
	empno%TYPE :=7788;
	emp_name emp.ename%TYPE;
	wages emp.sal%TYPE;
BEGIN
	SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages
	FROM emp WHERE empno = emp_id;
	DBMS_OUTPUT.PUT_LINE(emp_name||’name||--------||to_char(wages));
END;

④ 可转换的类型赋值
 CHAR 转换为 NUMBER使用TO_NUMBER 函数来完成字符到数字的转换,如:
v_total := TO_NUMBER(‘100.0’) + sal;
 NUMBER 转换为 CHAR使用 TO_CHAR 函数可以实现数字到字符的转换,如:
v_comm := TO_CHAR(‘123.45’) || ’元 ’
 字符转换为日期:
使用TO_DATE 函数可以实现 字符到日期的转换,如:
v_date := TO_DATE(‘2001.07.03’,‘yyyy.mm.dd’);
 日期转换为字符
使用TO_CHAR 函数可以实现日期到字符的转换,如:
v_to_day := TO_CHAR(SYSDATE, ‘yyyy.mm.dd hh24:mi:ss’) ;
⑤ 变量作用范围及可见性
在PL/SQL 编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。与其它高级语言类似, PL/SQL 的变量作用范围特点是:
 变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到 该块的结束。
 一个变量(标识)只能在你所引用的块内是可见的。
 当一个变量超出了作用范围, PL/SQL 引擎就释放用来存放该变量的空间(因为它可能不用了)。
 在子块中重新定义该变量后,它的作用仅在该块内。
⑥ 注释
使用“–”进行单行注释
使用“/* */”进行单行和多行注释
⑦ 案例显示

DECLARE
	v_ename VARCHAR2(20) := ‘Bill’;
	v_sal NUMBER(7,2) :=1234.56;
	v_deptno NUMBER(2) := 10;
	v_empno NUMBER(4) := 8888;
BEGIN
	INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )
		VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno,
		TO_DATE(1954.06.09,’yyyy.mm.dd’) );
	COMMIT;
END;
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值