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

您所在的位置:网站首页 程序结构组成部分包括 PL/SQL之块结构和组成元素

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

2024-07-09 21:26| 来源: 网络整理| 查看: 265

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 ] )

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

DBMS_ OUTPUT.PUT_LINE 过程的功能类似于 Java 中的 System.out.println() 直接将输出结果送到 标准输出中 .在使用上述过程之前必须将 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}

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

在使用嵌套表之前必须先使用该集合的构造器初始化它 . PL/SQL 自动提供一个带有相同名字的构造器作为集合类型 .嵌套表可以有任意数量的行 表的大小在必要时可动态地增加或减少 : 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;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3