2014-03-24 46 views
0

我在PLSQL块以下类型型表空值检查

TYPE table_type IS TABLE OF VARCHAR2(200); 
v_tab_1 table_type; 

值初始化为

if (PROD_AMNT > INV_AMNT) then    

v_tab_1 := table_type(PROD_AMNT, 'CURR'); 
...... 

有时是上面的条件不会是真的,并会出现在空值v_tab_1

什么是检查值的最佳方法确实存在于v_tab_1

我曾尝试为

if not(v_tab_1.EXISTS(v_tab_1.first)) then 

然而上述导致NO_DATA_FOUND例外

如何面对呢?

回答

1

队一个误差值转换成表类型? 然后检查这个值。

if (PROD_AMNT > INV_AMNT) then    

v_tab_1 := table_type(PROD_AMNT, 'CURR'); 

else 

v_tab_1 := table_type(0, 'ERR'); 

end if; 
+0

谢谢,我会试试这个。 – user75ponic

1

您可以使用以下方法:

- IF CreatedCursor%NOTFOUND THEN.. 

Or 

- IF YourField IS NOT NULL THEN.. 

or 

- if NVL(YourField , 'NA') = 'NA'... 
+0

感谢您的帮助 – user75ponic

+0

不客气.. – Adel

2

请检查变量是否为null或容器是否已初始化但为空。例如:

declare 
    type list_t is table of varchar2(10); 
    v_list list_t; 
begin 
    -- 
    -- 1) v_list is a null variable 
    -- 

    v_list := null; 

    if false then 
    v_list := list_t('foo', 'bar'); 
    end if; 

    if v_list is not null then 
    dbms_output.put_line('v_list = ' || v_list(1) || ';' || v_list(2)); 
    else 
    dbms_output.put_line('v_list is a null variable'); 
    end if; 

    -- 
    -- 2) v_list is an empty but initialized collection 
    -- 

    v_list := list_t(); 

    if false then 
    v_list := list_t('foo', 'bar'); 
    end if; 

    if v_list.exists(v_list.first) then 
    dbms_output.put_line('v_list = ' || v_list(1) || ';' || v_list(2)); 
    else 
    dbms_output.put_line('v_list is an empty but initialized collection'); 
    end if; 

end; 
/
+0

谢谢,它确实有帮助。 – user75ponic