简单程序引发 ORA-06502
Simple Procedure raise ORA-06502
有我的代码的简化版本一直在提高我的 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
首先,总是 return 值为 1。
SELECT count(*)
INTO w_count
FROM dual
限定词是什么并不重要。
最后,我只是 运行 您在 Oracle 11R2 中的简化代码示例,它没有引发异常。
我添加了以下语句来代替您的 "do something" 评论:
dbms_output.put_line('w_new_value: ' || w_new_value || '. w_count: ' || w_count);
结果是:
w_new_value: 12345. w_count: 1
所以,我认为您已经将您的示例简化为遗忘。您需要提供实际显示错误的内容。
祝你好运。
我自己找到了答案,我认为对其他知识有用。
我的数据库脚本的真正问题是语言。
Oracle 的意大利语 "version" 接受 ,
而不是 .
以将 VARCHAR2
翻译成 NUMBER
,这与大多数其他国家/地区不同。
为了使代码运行好解决方案是
w_new_value := replace(p_value,'.',',') / w_count;
这个技巧最终允许数据库像 NUMBER
一样使用我的 VARCHAR2
参数
有我的代码的简化版本一直在提高我的 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
首先,总是 return 值为 1。
SELECT count(*)
INTO w_count
FROM dual
限定词是什么并不重要。
最后,我只是 运行 您在 Oracle 11R2 中的简化代码示例,它没有引发异常。
我添加了以下语句来代替您的 "do something" 评论:
dbms_output.put_line('w_new_value: ' || w_new_value || '. w_count: ' || w_count);
结果是:
w_new_value: 12345. w_count: 1
所以,我认为您已经将您的示例简化为遗忘。您需要提供实际显示错误的内容。
祝你好运。
我自己找到了答案,我认为对其他知识有用。
我的数据库脚本的真正问题是语言。
Oracle 的意大利语 "version" 接受 ,
而不是 .
以将 VARCHAR2
翻译成 NUMBER
,这与大多数其他国家/地区不同。
为了使代码运行好解决方案是
w_new_value := replace(p_value,'.',',') / w_count;
这个技巧最终允许数据库像 NUMBER
VARCHAR2
参数