我的代码的简化版本一直在提高我ORA-06502:
declare
p_filter varchar2(300) := '2012';
p_value varchar2(300) := '12345.000';
w_new_value number(13,3) := null ;
w_count number(4) := null ;
BEGIN
SELECT count(*)
INTO w_count
FROM dual
where p_filter = p_filter;
--- more filters
if w_count != 0 then
w_new_value := p_value / w_count;
else
w_new_value := p_value;
end if;
-- do something
end;
/
有人可以帮我一个忙吗?
- nls_language = italian
- nls_territory = italy
- nls_currency =�
- nls_iso_currency = italy
- nls_numeric_characters = ,.
- nls_calendar = gregorian
- nls_date_format = dd-mon-rr
- nls_date_language = italian
- nls_characterset = we8iso8859p15
- nls_sort = west_european
- nls_time_format = hh24:mi:ssxff
- nls_timestamp_format = dd-mon-rr hh24:mi:ssxff
- nls_time_tz_format = hh24:mi:ssxff tzr
- nls_timestamp_tz_format = dd-mon-rr hh24:mi:ssxff tzr
- nls_dual_currency =�
- nls_nchar_characterset = al16utf16
- nls_comp = binary
- nls_length_semantics = byte
- nls_nchar_conv_excp = false
答案 0 :(得分:0)
首先,始终返回值为1。
SELECT count(*)
INTO w_count
FROM dual
限定符是什么并不重要。
最后,我刚刚在Oracle 11R2中运行了简化的代码示例,并没有抛出异常。
我添加了以下声明来代替您的“做某事”评论:
dbms_output.put_line('w_new_value: ' || w_new_value || '. w_count: ' || w_count);
结果是:
w_new_value: 12345. w_count: 1
所以,我认为你已经将你的例子简化为遗忘。您需要提供实际显示错误的内容。
祝你好运。答案 1 :(得分:0)
我发现自己是这个问题,我认为对其他人来说很有用。
我的数据库脚本的真正问题是语言
Oracle的意大利语“版本”接受,
而不是.
,以便将VARCHAR2
转换为NUMBER
,而不像大多数其他国家/地区。
为了使代码运行良好,解决方案是
w_new_value := replace(p_value,'.',',') / w_count;
此技巧最终允许数据库使用我的VARCHAR2
param,如NUMBER