PL 相对 SQL 的一个优势就是 PL 可以声明和使用变量与常量,变量和常量可以定义为任意 PL 数据类型。
声明变量后,可以使用赋值语句为其分配表达式的值。
PL 使用 :=
进行赋值操作,语法如下:
variable := expression ;
其中,variable 为 PL 变量,expression 为 PL 表达式。
空值的赋值运算
空值的赋值运算包括以下两种形式:
空值加数字仍是空值
NULL + < 数字> = NULL
空值加(连接)字符,结果为字符
NULL || <字符串> = < 字符串>
示例如下:
obclient> DECLARE
-> p1 INTEGER := 3;
-> p2 INTEGER;
-> BEGIN
-> p2 := p1 + NULL;
-> DBMS_OUTPUT.PUT_LINE(NULL||'p1 + NULL = '||p2);
-> END;
-> /
Query OK, 0 rows affected (0.02 sec)
p1 + NULL =
布尔型的赋值运算
布尔值(BOOLEAN)支持逻辑运算,BOOLEAN 变量只可以被赋值为 TRUE,FALSE 和 NULL。
示例如下:
DECLARE
done BOOLEAN;
BEGIN
done := FALSE;
WHILE NOT done LOOP
Null;
done := TRUE;
END LOOP;
END;
SELECT INTO 赋值运算
数据库可以通过 SELECT INTO 语句直接赋值给变量,每次执行 SELECT INTO 语句就赋值一次,要求被赋值的变量类型与 SELECT 中的列一一对应。
示例如下:
obclient> DECLARE
-> emp_id employees.employee_id%TYPE :=105;
-> emp_name employees.first_name%TYPE;
-> wages employees.salary%TYPE;
-> BEGIN
-> SELECT first_name, NVL(salary,0) INTO emp_name, wages
-> FROM employees WHERE employee_id = emp_id;
-> DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages));
-> END;
-> /
Query OK, 0 rows affected (0.03 sec)
David----4800
注意
数据库赋值不能赋给布尔型变量。
赋值时的数据类型转换
在赋值时可以使用函数对数据类型进行转换。
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') ;
完整的函数列表信息请参见《**OceanBase 数据库 SQL 参考手册**》的 转换函数 。