通过在CREATE PROCEDURE或CREATE FUNCTION语句中包括DEFAULT子句或使用分配运算符:=
,可设置形参的默认值。
形参声明的常规形式如下:
(name [ IN|OUT|IN OUT ] data_type [{DEFAULT | := } expr ])
- name是分配给参数的标识符。
- IN|OUT|IN OUT指定参数模式。
- data_type是分配给变量的数据类型。
- expr是分配给参数的默认值。如果未包括DEFAULT子句,则调用方必须为参数提供一个值。
每次调用函数或存储过程时都会计算默认值。例如,将SYSDATE分配给DATE类型的参数会导致参数具有当前调用的时间,而不是创建存储过程或函数的时间。
以下简单存储过程演示了如何使用分配运算符将SYSDATE的默认值设置到参数hiredate中:
CREATE OR REPLACE PROCEDURE hire_emp (
p_empno NUMBER,
p_ename VARCHAR2,
p_hiredate DATE := SYSDATE
)
IS
BEGIN
INSERT INTO emp(empno, ename, hiredate)
VALUES(p_empno, p_ename, p_hiredate);
DBMS_OUTPUT.PUT_LINE('Hired!');
END hire_emp;
如果参数声明包括默认值,则在调用存储过程时可从实参列表中省略该参数。对示例存储过程 (hire_emp) 的调用必须包含两个参数:员工编号 (p_empno) 和员工名称 (p_empno)。第三个参数 (p_hiredate) 默认为SYSDATE的值:
hire_emp (7575, 'Clark')
如果在调用存储过程时包括实参的值,则该值优先于默认值:
hire_emp (7575, 'Clark', '15-FEB-2010')
添加了一名新员工,其录用日期为February15, 2010,而与SYSDATE的当前值无关。
您可以通过将分配运算符替换为DEFAULT关键字,编写同一存储过程:
CREATE OR REPLACE PROCEDURE hire_emp (
p_empno NUMBER,
p_ename VARCHAR2,
p_hiredate DATE DEFAULT SYSDATE
)
IS
BEGIN
INSERT INTO emp(empno, ename, hiredate)
VALUES(p_empno, p_ename, p_hiredate);
DBMS_OUTPUT.PUT_LINE('Hired!');
END hire_emp;