【发布时间】:2012-03-27 13:58:31
【问题描述】:
我在调用 oracle instr 函数时遇到了一个相当奇怪的行为,或者我可能是瞎了眼,看不到我的愚蠢错误。
其实我写了一个分割字符串的过程。例如,如果我们有字符串
a,e,i,o,u
然后我的拆分方法看起来像
string_split('a,e,i,o,u',',',5);
第一个参数是要拆分的字符串,第二个是分隔符,第三个是拆分后我知道的元素的数量。
现在,在很多事情中,我的程序要做的一件事就是调用
start_index := instr(temp_string_to_split,',',1,(total_element-i));
但是在调用它的那一刻我得到一个
ORA-06512 ,numeric or value error
但如果我调用
start_index := instr(temp_string_to_split,1,(total_element-i));
程序运行,但不是以理想的方式运行。请注意,在第二次调用中缺少分隔符参数,并且直接将数字作为第二个参数传递,我猜这应该会导致大时间异常。但令人惊讶的是,它运行良好。
谁能解释一下这个异常...或者帮我看看我是否遗漏了什么。
谢谢, 马维亚
【问题讨论】:
-
你能把洞方法贴出来
string_split。不知道你怎么确定total_element! -
至于你为什么会得到异常:我也怀疑
total_elements- 尝试删除它,看看你是否得到异常。至于为什么第二个有效(没有“大时间例外”):instr中的第三和第四个参数是可选的,因此它可能将1隐式转换为字符串'1'(如果你有@987654332 @ 在你的temp_string_to_split中你可能会得到第一次出现的索引) -
ORA-06512:“原因: 由于堆栈被未处理的异常展开,所以回溯消息。” [1] 除了提供问题的测试用例或拆分字符串的代码外,请提供错误的完整堆栈跟踪。注1:docs.oracle.com/cd/E11882_01/server.112/e17766/…
-
使用数字第二个参数对
INSTR的三参数调用不会产生错误,因为该参数正在转换为字符串。例如。SELECT INSTR( '12345', 23 ) FROM DUAL返回2而不是生成错误。