变量声明 (PL/SQL)

通常,除全局变量或程序包级变量以外,必须在块的声明节中定义该块所使用的变量。变量声明由对变量指定的名称以及该变量的数据类型组成。(可选)可以在变量声明中将变量初始化为缺省值。

语法

阅读语法图跳过直观语法图名称CONSTANT类型NOT NULL:=DEFAULTexpressionNULL

描述

名称
指定要对此变量指定的标识。
CONSTANT
指定变量值是常量。必须指定缺省表达式,并且,不能在应用程序中将新值指定给此变量。
类型
指定此变量的数据类型。
NOT NULL
当前由 Db2® 忽略。将变量声明指定为 NOT NULL 的例程已成功编译。但是,这类例程的行为仍然好像尚未指定为 NOT NULL 一样。不会执行运行时检查以禁止在声明为 NOT NULL 的变量中使用 null 值。如果您的应用程序需要限制 PL/SQL 变量中的 null 值,请参阅以下示例。
DEFAULT
指定变量的缺省值。每次进入该块时,都将对此缺省值进行求值。例如,如果将 SYSDATE 指定给类型为 DATE 的变量,那么该变量将解析为当前调用时间,而不是解析为先前预编译该过程或函数时的时间。
:=
赋值运算符是 DEFAULT 关键字的同义词。但是,如果在未指定 表达式 的情况下指定此运算符,那么此变量将初始化为值 NULL。
表达式
指定进入该块时要指定给此变量的初始值。
NULL
指定 SQL 值 NULL,它具有 null 值。

示例

  1. 以下过程中的变量声明利用了由字符串和数字表达式组成的缺省值:
    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
  2. 以下示例通过添加隐式检查来限制 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;