一、PL/SQL语言基础
1.PL/SQL块简介
--构成PL/SQL程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的,
--每个语句块完成特定的功能,语句块可以具有名字(命名块),也可以不具有
名字(匿名块),语句块之间还可以相互嵌套。
(1)块结构
DECLARE Declarations --定义部分:主要定义程序中所要使用到的常量、变量、数据类型、游标、异常处理等。 ---------------------------------------------------- BEGIN --执行部分:它是PL/SQL块的功能实现部分,该部分通过一系列语句和流程控制, Executable code --实现数据查询、数据操作、事务控制、游标处理等数据库操作的功能。 -------------------若无EXCEPTION,则以END结束-------------------------------- EXCEPTION Exceptional handlers --异常处理部分(可选):该部分用于处理该PL/SQL块执行过程中产生的错误。 END;
(2)匿名块
--PL/SQL匿名块,是指动态生成,只能执行一次的块,它没有名字,不能由其他应用程序调用。
1 SET SERVEROUTPUT ON --环境变量SERVEROUTPUT要设置为ON,否则不显示。 2 BEGIN 3 DBMS_OUTPUT.PUT_LINE('This a minimum anonymous block'); 4 END; 5 DECLARE 6 v_sname VARCHAR2(10); 7 BEGIN 8 SELECT name INTO v_sname 9 FROM Students WHERE student_id = 10318; 10 DBMS_OUTPUT.PUT_LINE('学生姓名:' || v_sname); 11 END; 12 DECLARE 13 v_sname VARCHAR2(10); 14 BEGIN 15 SELECT name INTO v_sname 16 FROM Students WHERE student_id = 10318; 17 DBMS_OUTPUT.PUT_LINE('学生姓名:' || v_sname); 18 EXCEPTION 19 WHEN NO_DATA_FOUND THEN 20 DBMS_OUTPUT.PUT_LINE('你输入的学号不存在!'); 21 END;
(3)命名块
--PL/SQL命名块是指一次编译可多次执行的PL/SQL程序(可嵌套),包括自定义函数、过程、包、触发器等。
--它们编译后放在服务器中,由应用程序或系统在特定条件下调用执行。
二、PL/SQL基本语法要素
1.字符集
大小写英文字母,包括A-Z和a-z。
数字,包括0-9.
空白符,包括制表符、空格和回车符。
符号,包括:!@#¥%等。
2.标识符
标识符(Identifier)用于定义PL/SQL变量、常量、异常、游标名称、
游标变量、参数、子程序名称和其他的程序单元名称等。必须以字母开头。
3.文字
文字(Literal)是指不能作为标识符的数字型、字符型、日期型和布尔型数据。
(1)数字型文字
数字型文字分为整数与实数两类。
注意:SQL语句和PL/SQL程序中均可引用:2012、3.14.
只有PL/SQL程序中可以引用:-10E4、5.123e-6、7*10**2。
(2)字符型文字
字符型文字是用单元引号括起来的一个或多个字符,区分大小写。
注意:如果字符型文字中本身包含单引号,则用两个连续的单引号进行转义。
在Oracle 10g中,如果字符串文本包含单引号,那么还可以使用其他分隔符(如[],(),<>等)赋值。
'I am student'
'I''m a student' 或者 q'[I'm a student.]'。
(3)日期型文字
日期型数值也必须放在单引号之中。
'01-04月-1963'、'11-JAN-1990'、'2008-01-01 08:00:01'。
(4)布尔型文字
包括:TRUE、FALSE、NULL这三个值。
4.分隔符Delimiter
--分隔客人由具有特定含义的单个字符或组成字符构成。
5.注释Comment
注释分为:单行注释--
多行注释/* ………… */
三、变量及其数据类型
PL/SQL变量的数据类型包括标量Scalar类型、复合Composite类型、
引用Reference类型和LOB(Large Object)类型等四种类型。
1.标量变量
--标量变量具有数字型、字符型、日期时间型、布尔型等多种数据类型。标量变量只能存放单个数据的变量。
(1)数字类型:NUMBER、PLS_INTEGER、BINARY_INTEGER、BINARY_DOUBLE、BINARY_FLOAT
(2)字符类型:CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2
LONG、RAW、LONG RAW、ROWID、UROWID
(3)日期时间类型:DATE、TIMESTAMP和INTERVAL。
(4)布尔类型
2.复合变量
--复合类型的变量包含一个或多个标题变量,这些变量被称为复合类型的属性。
3.引用变量
--REF CURSOR类型和REF类型。PL/SQL中的引用变量与C/C++语言中指针类似,可以指向不同的存储位置。
4.LOB变量(大对象)
包括:CLOB、BLOB、NCLOB、BFILE等。
5.另外,为了使PL/SQL代码中定义的变量,能与数据库中的某一列或某一行的数据类型相联系,
Oracle提供了%TYPE和 %ROWTYPE的变量定义方式 DECLARE v_name students.name%TYPE; DECLARE v_student students %ROWTYPE;
--即变量v_student的数据类型与students表定义的数据类型一致。
--如果students表定义的数据类型发生改变,那么变量v_student的数据类型也随之改变。