|
smartzhai 发表于 2012-3-17 09:46 ![]()
分析的非常清楚。
D也正确,是不是说明已经初始化的集合也可以变成未初始话的?
那么初始化都做 ...
要把一个已经初始化的集合变成未初始化很容易,只要赋值为NULL就可以了:
DECLARE
TYPE plch_numbers_ntt IS TABLE OF NUMBER;
lnt_1 plch_numbers_ntt;
BEGIN
lnt_1 := plch_numbers_ntt(1,2,3);
dbms_output.put_line(lnt_1.COUNT); ----- 这里能输出3
lnt_1 := NULL;
dbms_output.put_line(lnt_1.COUNT); ----- 这里报错
END;
/
过程里参数的default值,并不是说发现此参数为NULL时会把这个值赋给它,而是说你调用的时候忽略这个参数才会给这个值。
CREATE OR REPLACE PROCEDURE pro1 (filed1 number default 5,filed2 char)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('filed1='||filed1);
DBMS_OUTPUT.PUT_LINE('filed2='||filed2);
END;
/
DECLARE
v_var number;
v_var2 CHAR(10);
BEGIN
pro1(v_var,v_var2);
END;
/
输出:两个都是空
filed1=
filed2=
换一种调用方式,忽略第一个参数:
DECLARE
v_var number;
v_var2 CHAR(10);
BEGIN
pro1(filed2=>v_var2); ---- 只传入第二个参数,用名字记号法
END;
/
输出:第一个参数被赋予缺省值
filed1=5
filed2=
声明变量未赋值之前有没有分配内存?对于集合来说应该没有,就是一个空指针。像NUMBER型这样的应该已经分配了,我也是猜的。
|
|