2017-05-31 62 views
1

請看下面的代碼。集合中的第4個元素爲null,因此我期望該變量不存在。但仍然,我使用存在功能時獲得TRUE。請澄清爲什麼會發生這種情況?Oracle集成功能 - 未獲得預期結果

DECLARE type nt is varray(5) of varchar2(5); nt1 nt := nt(); BEGIN nt1.extend(5); nt1 :=nt('ant','ball','cat',null,'elm'); for i in nt1.first..nt1.last loop dbms_output.put_line(nt1(i)); end loop; if nt1.exists(4) then dbms_output.put_line('TRUE'); end if; END;

是否足夠,如果我剛纔擴展該變量,對於存在函數計算爲真?

+0

'DECLARE type nt is varray(5)of varchar2(5); nt1 nt:= nt(); BEGIN nt1.extend(3); nt1:= nt('ant','ball','cat'); - ,null,'elm'); for i in nt1.first..nt1.last loop dbms_output.put_line(nt1(i)); end loop;如果 nt1.exists(4)則dbms_output.put_line('TRUE'); else dbms_output.put_line('FALSE'); end if; END; ' 此代碼評估爲FALSE,因爲我還沒有擴展該變量。 – Natty

回答

1

元素存在,只有它的值爲null。

隨着

nt1.extend(5); 

你已經創建5個條目,所以nt1.exists(4)是真實的。因爲varray可以沒有間隙,所以exists只會告訴你數組是否已經填充到那個位置。 (如果是,可以安全地訪問該元素。)

if nt1.exists(4) then 
    if nt1(4) is null then 
    dbms_output.put_line('Entry 4 is empty (null)'); 
    else 
    dbms_output.put_line('Entry 4 has value' || nt1(4)); 
    end if; 
else 
    dbms_output.put_line('Array not filled up till 4th element, yet'); 
end if;