Oracle数据库之PL/SQL程序基础设计

2015-07-16 12:07:21 · 作者: · 浏览: 1

一、PL/SQL块结构


要实现PL/SQL程序设计,先介绍如下的基本内容:


二、标识符


PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同:


注意: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。


三、变量


1. 变量定义


声明:


示例:


赋值:


示例:


2. 变量作用域


在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用域所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:


四、运算符


1. 关系运算符


2. 逻辑运算符


3. 算术运算符


4. 其它运算符


五、数据类型


1. BOOLEAN


该数据用于定义布尔变量,其变量的值为TRUE、FALSE或NULL。注意此类型只能在PL/SQL中使用,表列是没有此类型的。


2. %TYPE


通常用于指定表的某个列的数据类型,可以理解为“的类型”(小技巧:%读“的”)。


示例:


使用%TYPE特性的优点在于:


3. %ROWTYPE


%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致。


示例:


使用%ROWTYPE特性的优点在于:


4. 复合数据类型


4.1. 记录(Record)


记录类型类似于C语言中的结构数据类型,它把分离的、逻辑相关的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或RECORD数据类型的成员,称作PL/SQL RECORD的域(FIELD),其作用是存放互不相同但逻辑相关的信息。


语法:


在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。


示例1:


说明:我们可以使用DBMS_OUTPUT.PUT_LINE(outdata)DBMS_OUTPUT.PUT(outdata)将处理结果输出到屏幕上。


运行结果:


示例2(示例中所用到的表及数据见文末):


说明:可以用SELECT语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字段相配即可。&emp_id表示接收用户的输入。


紧跟着&符号后面的变量被称为替换变量。替换变量对数据库引擎是“不可见的”。其实PL/SQL会用用户输入的文本内容来替换变量引用。


如果你想在代码的不同地方引用相同的替换变量,那就需要在第一个替换变量前面放两个&符号,这样才会为你保留这个值以便后续使用。


输入2,输出结果:


4.2. 表(TABLE)


4.2.1. 索引表


索引表也称为PL/SQL表,它是Oracle早期版本用于处理PL/SQL数组的数据类型。索引表的元素个数没有限制,并且下标可以为负值。


它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,使得可以在PL/SQL中模仿数据库中的表。


注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。


语法结构:


关键字INDEX BY表示创建一个主键索引,以便引用记录表变量中的特定行。


表是集合类型,集合类型常用方法有:


集合方法调用语法为:


示例1:


输出结果:


示例2:


输出结果:


示例3:


输出结果:


4.2.2 嵌套表


嵌套表的元素下标从1开始,并且元素个数没有限制。嵌套表数组元素值可以是稀疏的。


注意:索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为表列的数据类型。


语法结构:


示例1:


输入2,输出结果:


在表列中也可以使用嵌套表。


在表列中使用嵌套表类型,必须首先使用CREATE TYPE命令建立嵌套表类型。另外注意,必须要为嵌套表列指定专门的存储表。


示例2:


4.3. 数组(VARRAY)


数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。


语法结构:


示例:


输出结果:


5. 绑定变量


绑定变量是在主机环境中定义的变量。在PL/SQL 程序中可以使用绑定变量作为他们将要使用的其它变量。为了在PL/SQL 环境中声明绑定变量,使用命令VAR或VARIABLE。


当在SQL*Plus中与PL/SQL块之间进行数据交互时,需要使用SQL*Plus绑定变量来完成。


当在PL/SQL中引用非PL/SQL变量时,必须要在非PL/SQL变量前加冒号(“:”)。


示例:


输出结果:


六、常用类型转换函数


CHAR 转换为 NUMBER:


使用 TO_NUMBER 函数来完成字符到数字的转换,如:


NUMBER 转换为CHAR:


使用 TO_CHAR 函数可以实现数字到字符的转换,如:


字符转换为日期:


使用 TO_DATE 函数可以实现 字符到日期的转换,如:


日期转换为字符:


使用 TO_CHAR 函数可以实现日期到字符的转换,如:


七、RETURNNING的使用


示例1:


说明:


数据类型ROWID用于存放数据的行号。


RETURNING子句作用:用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES子句插入数据时,RETURNING 字句还可将列表达式、ROWID和REF值返回到输出变量中。使用RETURNING子句是应注意以下几点限制:


示例2:


说明:


RETURNING子句用于检索被修改行的信息。当UPDATE语句修改单行数据时,RETURNING子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。


示例3:


说明:


RETURNING子句用于检索被删除行的信息:当DELETE语句删除单行数据时,RETURNING子句可以检索被删除行的ROWID和REF值,以及被删除列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当DELETE语句删除多行数据时,RETURNING子句可以将被删除行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在DELETE中使用RETURNING子句的限制与INSERT语句中对RETURNING子句的限制相同。


八、注释


在PL/SQL里,有两种注释:


示例:


各示例中所涉及的表及测试数据


?


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------