2017-08-25 35 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;