变量声明 (PL/SQL)
通常,除全局变量或程序包级变量以外,必须在块的声明节中定义该块所使用的变量。变量声明由对变量指定的名称以及该变量的数据类型组成。(可选)可以在变量声明中将变量初始化为缺省值。
语法
描述
- 名称
- 指定要对此变量指定的标识。
- CONSTANT
- 指定变量值是常量。必须指定缺省表达式,并且,不能在应用程序中将新值指定给此变量。
- 类型
- 指定此变量的数据类型。
- NOT NULL
- 当前由 Db2® 忽略。将变量声明指定为 NOT NULL 的例程已成功编译。但是,这类例程的行为仍然好像尚未指定为 NOT NULL 一样。不会执行运行时检查以禁止在声明为 NOT NULL 的变量中使用 null 值。如果您的应用程序需要限制 PL/SQL 变量中的 null 值,请参阅以下示例。
- DEFAULT
- 指定变量的缺省值。每次进入该块时,都将对此缺省值进行求值。例如,如果将 SYSDATE 指定给类型为 DATE 的变量,那么该变量将解析为当前调用时间,而不是解析为先前预编译该过程或函数时的时间。
- :=
- 赋值运算符是 DEFAULT 关键字的同义词。但是,如果在未指定 表达式 的情况下指定此运算符,那么此变量将初始化为值 NULL。
- 表达式
- 指定进入该块时要指定给此变量的初始值。
- NULL
- 指定 SQL 值 NULL,它具有 null 值。
示例
- 以下过程中的变量声明利用了由字符串和数字表达式组成的缺省值:
通过调用此过程,可以获得以下样本输出:CREATE OR REPLACE PROCEDURE dept_salary_rpt ( p_deptno NUMBER ) IS todays_date DATE := SYSDATE; rpt_title VARCHAR2(60) := 'Report For Department # ' || p_deptno || ' on ' || todays_date; base_sal INTEGER := 35525; base_comm_rate NUMBER := 1.33333; base_annual NUMBER := ROUND(base_sal * base_comm_rate, 2); BEGIN DBMS_OUTPUT.PUT_LINE(rpt_title); DBMS_OUTPUT.PUT_LINE('Base Annual Salary: ' || base_annual); END;CALL dept_salary_rpt(20); Report For Department # 20 on 10-JUL-07 16:44:45 Base Annual Salary: 47366.55 - 以下示例通过添加隐式检查来限制 null 值,方法是使用 IS NULL 或 IS NOT NULL 并根据需要处理错误情况:
create table T(col1 integer); insert into T values null; declare N integer not null := 0; null_variable exception; begin select col1 into N from T; if N is null then raise null_variable; end if; exception when null_variable then -- 在此处处理错误条件。 dbms_output.put_line('Null variable detected'); end;
