4.PL_SQL——变量声明以及初始化,字符串分隔符
一、变量的作用
PL/SQL既然是编程语言,就必然会用到变量。和其他程序语言类似,PL/SQL中的变量主要有以下作用:1. 用来临时的存放数据;2.用来操作数据;3. 重复使用数据。
例如上一节中举的例子,就用到了变量:
DECLARE
v_fnameVARCHAR2(20);
-- 声明变量
BEGIN
SELECT first_name
INTO v_fname
-- 将SELECT语句查询到的数据存放到变量v_fname中
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE('The result is ' || v_fname);
-- 使用存放在变量v_fname中的数据
END;
二、变量的命名规则
PL/SQL中命名规则主要有:
1. 必须以字母开头;
2. 可以包含字母和数字;
3. 可以包含特殊字符,如$, _和#。注意, _可以使用,但$和#最好尽量不用,因为在其他编程语言中很少允许使用$和#,为了养成良好的编程习惯,最好不要使用这两个符号;
4. 变量的长度最好不要超过30个字符;
5. 不能使用关键字和保留字。
三、变量的使用方法
PL/SQL中变量的用法如下:
1. 变量需要在DECLARE部分定义;变量可以在DECLARE部分初始化,也可以不初始化,视程序需要而定。
2. 在执行部分,即BEGIN部分赋新值和使用;
3. 可以作为参数用在子程序中;
4. 也可以用来存放程序的输出结果。
下面来结合之前用到的例子,演示变量的用法:
SQL> edit
DECLARE v_fname VARCHAR2(20);--声明了变量v_fname,但没有初始化 BEGIN SELECT first_name INTO v_fname-- 变量v_fnam 用来存放SELECT语句的查询结果 FROM employees WHERE employee_id = 100; DBMS_OUTPUT.PUT_LINE('Theresult is ' || v_fname);-- 变量v_fnam作为参数被传递到方法中 END; /
The result is StevenPL/SQL procedure successfullycompleted.
四、声明和初始化变量
变量需要声明,初始化则可以在声明时进行,也可以不在此时进行,但是如果声明时定义为not null的情况下,就必须初始化才能使用。
变量声明的格式为:
Identifier [CONSTANT]datatype [NOT NULL] [ := | DEFAULT expression ]
这里中括号中的内容都是可选项,具体含义如下:
1. CONSTANT表示常量,一旦定义为常量,则不能在为该变量赋其他的值了;
2. 如果定义了[NOT NULL],则该变量必须赋值;
3. PL/SQL中赋值使用的是 :=,初始化时也可以使用DEFAULT来定义默认值。
来看几个具体的例子:
DECLARE v_hiredate DATA; --此处只声明没有初始化 v_deptno NUMBER(2) NOT NULL := 10; -- 声明时定义为 NOT NULL,所以必须为其初始化,赋值为10,也可以写成 -- v_deptno NUMBER(2) NOT NULL DEFUALT 10; v_location VARCHAR2(13) := 'atlanta' -- 声明的的同时也初始化 c_comm CONSTANT NUMBER := 1400; --声明时定义为常量,意味着以后不能再为其赋其他的值了
下面来看两个例子:
例1.
SQL> DECLARE
v_myName VARCHAR(20); -- 只声明,没有初始化 BEGIN DBMS_OUTPUT.PUT_LINE('My name is: ' || v_myName); -- 使用的是未初始化的变量v_myName v_myName := 'John'; -- 为变量v_myName 赋值 DBMS_OUTPUT.PUT_LINE('My name is: ' || v_myName); -- 使用的是赋值后的变量 END;
SQL> /
Myname is: -- 由于没有初始化,故没有结果Myname is: John -- 赋值后使用变量,能显示该变量的值PL/SQLprocedure successfully completed.
例2.
SQL>
DECLARE v_myName VARCHAR2(20) := 'John'; -- 声明变量的同时为其初始化 BEGIN DBMS_OUTPUT.PUT_LINE('My name is: ' || v_myname); -- 注意,这里故意将变量写成小写,以验证PL/SQL中不区分大小写 END; /
Myname is: JohnPL/SQLprocedure successfully completed.
五、字符串分隔符
在打印输出结果时经常会用到引号,但是单引号'有时候也作为分割符使用,如I'm这种情况,为了避免混淆,PL/SQL中使用了q来进行分隔符的引用:q表示quotes,加上单引号',后面接任意成对的符号,都可以起到引用的单引号作用。看下面这个例子:
SQL> edit
DECLARE v_event VARCHAR2(15); BEGIN v_event := q'!Father's day!'; -- 这里使用q',然后加上成对的!,就可以避免把分隔符'当成单引号 DBMS_OUTPUT.PUT_LINE('3rd Sunday in June is :' || v_event); v_event := q'[Mother's day]'; -- 成对的特殊符号都可以,这里使用的是一对中括号[] DBMS_OUTPUT.PUT_LINE('2nd Sunday in May is :' || v_event); END;
SQL> /
3rdSunday in June is :Father's day2ndSunday in May is :Mother's dayPL/SQLprocedure successfully completed.