我有一个存储过程如下.
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',Y IN NUMBER DEFAULT 1) AS BEGIN DBMS_OUTPUT.PUT_LINE('X'|| X||'--'||'Y'||Y); END;
当我执行上述过程
EXEC TEST(NULL,NULL);
它将打印X-Y.当输入参数为空时,输入参数不会默认为过程签名中的指定值
.那么使用默认值呢?如果我们传递null值作为输入,并且我们要用默认值替换null值怎么办?
默认值仅在未指定参数时使用.在您的情况下,您确实指定了两个参数 – 两个都是提供的,值为NULL. (是的,在这种情况下,NULL被认为是一个真正的价值:-).尝试:
EXEC TEST()
分享享受.
附录:过程参数的默认值当然被埋在某个系统表中(请参见SYS.ALL_ARGUMENTS视图),但从视图中获取默认值涉及从LONG字段中提取文本,并且可能会被证明是比它更值得痛苦.简单的方法是在程序中添加一些代码:
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',Y IN NUMBER DEFAULT 1) AS varX VARCHAR2(32767) := NVL(X,'P'); varY NUMBER := NVL(Y,1); BEGIN DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY); END TEST;