PL 相对 SQL 的一个优势就是 PL 可以声明和使用变量与常量,变量和常量可以定义为任意 PL 数据类型。

声明变量后,可以使用赋值语句为其分配表达式的值。

PL 使用 := 进行赋值操作,语法如下:

  1. variable := expression ;

其中,variable 为 PL 变量,expression 为 PL 表达式。

空值的赋值运算

空值的赋值运算包括以下两种形式:

  • 空值加数字仍是空值 NULL + < 数字> = NULL

  • 空值加(连接)字符,结果为字符 NULL || <字符串> = < 字符串>

示例如下:

  1. obclient> DECLARE
  2. -> p1 INTEGER := 3;
  3. -> p2 INTEGER;
  4. -> BEGIN
  5. -> p2 := p1 + NULL;
  6. -> DBMS_OUTPUT.PUT_LINE(NULL||'p1 + NULL = '||p2);
  7. -> END;
  8. -> /
  9. Query OK, 0 rows affected (0.02 sec)
  10. p1 + NULL =

布尔型的赋值运算

布尔值(BOOLEAN)支持逻辑运算,BOOLEAN 变量只可以被赋值为 TRUE,FALSE 和 NULL。

示例如下:

  1. DECLARE
  2. done BOOLEAN;
  3. BEGIN
  4. done := FALSE;
  5. WHILE NOT done LOOP
  6. Null;
  7. done := TRUE;
  8. END LOOP;
  9. END;

SELECT INTO 赋值运算

数据库可以通过 SELECT INTO 语句直接赋值给变量,每次执行 SELECT INTO 语句就赋值一次,要求被赋值的变量类型与 SELECT 中的列一一对应。

示例如下:

  1. obclient> DECLARE
  2. -> emp_id employees.employee_id%TYPE :=105;
  3. -> emp_name employees.first_name%TYPE;
  4. -> wages employees.salary%TYPE;
  5. -> BEGIN
  6. -> SELECT first_name, NVL(salary,0) INTO emp_name, wages
  7. -> FROM employees WHERE employee_id = emp_id;
  8. -> DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages));
  9. -> END;
  10. -> /
  11. Query OK, 0 rows affected (0.03 sec)
  12. David----4800

注意

数据库赋值不能赋给布尔型变量。

赋值时的数据类型转换

在赋值时可以使用函数对数据类型进行转换。

  • CHAR 转 NUMBER

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

  1. v_total := TO_NUMBER('100.0') + sal;
  • NUMBER 转 CHAR

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

  1. v_comm := TO_CHAR('123.45') || ’元’ ;
  • 字符转日期

    使用 TO_DATE 函数实现字符到日期的转换,示例如下:

  1. v_date := TO_DATE('2001.07.03','yyyy.mm.dd');
  • 日期转字符

    使用 TO_CHAR 函数实现日期到字符的转换,示例如下:

  1. v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ;

完整的函数列表信息请参见《**OceanBase 数据库 SQL 参考手册**》的 转换函数