SPL 是块结构语言。可出现在块中的第一个部分是声明。声明包含变量、游标和可在块中包含的 SPL 语句中使用的其他类型的定义。

一般而言,块中使用的所有变量都必须在块的声明部分中声明。变量声明包括分配给变量的名称及其数据类型。在变量声明中,变量也可以选择初始化为默认值。

变量声明的常规语法为:

name type [ { := | DEFAULT } { expression | NULL } ];
  • name 是分配给变量的标识符。
  • type 是分配给变量的数据类型。

[ := expression ](如果提供了)指定在进入块时分配给变量的初始值。如果未提供子句,则变量将初始化为 SQL NULL 值。

每次进入块时都会计算默认值。例如,将 SYSDATE 分配给 DATE 类型的变量会使该变量具有当前调用的时间,而不是预编译存储过程或函数时的时间。

以下存储过程说明一些变量声明,它们使用包括字符串和数值表达式的默认值。

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;

上述存储过程的以下输出显示确实将变量声明中的默认值分配给了变量。

EXEC dept_salary_rpt(20);

Report For Department # 20 on 10-JUL-07 16:44:45
Base Annual Salary: 47366.55