2017-08-25 33 views
1

我需要在一個包中創建一個集合,但我不知道錯誤在哪裏...Oracle - 類型表 - 收集方法在IF語句中存在 - ORA-06502:PL/SQL:錯誤:字符到數字轉換錯誤

這是我的聲明和初始化:

avversao varchar2(30); 
TYPE tListaVersaoHomologada IS TABLE OF NVARCHAR2(30); 
vVersaoHomologada tListaVersaoHomologada := tListaVersaoHomologada('0.06', '0.07'); 

而這正是引發異常

if NOT(vVersaoHomologada.EXISTS(avversao)) then 
     ... 
end if; 

變量

avversao 

具有值之一:

  • 0.06
  • 0.07

參考:

Using PL/SQL Collections and Records

Collection Methods

+0

爲什麼你使用'NVARCHAR2'的數值? –

+0

@WernfriedDomscheit不是我的代碼,但我想是因爲本地化/區域定義...代碼是在小數點分隔符是逗號而不是點的國家編寫的。 Oracle是否總是將小數點分隔符視爲逗號? – akaAndyDaSilva

+0

小數分隔符由NLS設置管理。默認是美式的,但很容易將NLS_NUMERIC_CHARCTERS設置爲任何你需要的 – APC

回答

1

member of - 檢查集合中是否存在值。
EXISTS - 用於檢查集合是否具有索引值。

declare 
avversao varchar2(30) := '0.06'; 
TYPE tListaVersaoHomologada IS TABLE OF VARCHAR2(30); 
vVersaoHomologada tListaVersaoHomologada := tListaVersaoHomologada('0.06', '0.07'); 
begin 

if avversao member of vVersaoHomologada then 
    dbms_output.put_line('!!!!Exist!!!!!'); 
end if; 

end;