Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql to_编号导致的间歇性Ora 1722错误_Sql_Plsql_Oracle11g - Fatal编程技术网

Sql to_编号导致的间歇性Ora 1722错误

Sql to_编号导致的间歇性Ora 1722错误,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,我正在研究一个我无法理解的问题,但我相信我今天取得了一些进展。在where子句中,有以下代码: AND to_number(REPLACE(TRANSLATE ( decode( INSTR(hra_ans.answer_text, '.',1 , 2), 0 , UPPER(hra_ans.answer_text) , 0),'ABCDEFGHIJKLMNOPQURSTWVXYZ+<>:',' '), ' ','')) >= 10 和to_编号(替换(翻译(解码)(指令(h

我正在研究一个我无法理解的问题,但我相信我今天取得了一些进展。在where子句中,有以下代码:

AND to_number(REPLACE(TRANSLATE ( decode( INSTR(hra_ans.answer_text, '.',1 , 2), 0 , UPPER(hra_ans.answer_text) , 0),'ABCDEFGHIJKLMNOPQURSTWVXYZ+<>:',' '), ' ','')) >= 10
和to_编号(替换(翻译(解码)(指令(hra_ans.answer_text)”,1,2),0,上限(hra_ans.answer_text),0),'ABCDEFGHIJKLMNOPQURSTWVXYZ+:','','')>=10
现在,这个hra_ans.answer_文本列可以包含从'>'到'>15'到'13.68'到'no results'到'1.2.3.4'等任何内容。无效数字错误只会间歇性出现,而不是每次都会出现。我曾尝试使用“[^0-9.]”表达式将Translate替换为Regexp\u Replace,但这也不能解决问题。我发现这个是这样的:

在那篇文章中,错误似乎是由于没有明确的操作顺序而引起的。我有可能遇到同样的情况吗?如果不是,还会导致这种行为吗


谢谢

如果可以声明一个新函数,最简单的选择可能是执行以下操作

CREATE FUNCTION my_to_number( p_str IN VARCHAR2 )
  RETURN NUMBER
IS
  l_num NUMBER;
BEGIN
  BEGIN
    l_num := to_number( p_str );
  EXCEPTION
    WHEN others THEN
      l_num := NULL;
  END;

  RETURN l_num;
END my_to_number;
然后在查询中使用它

AND my_to_number( hra_ans.answer_text ) >= 10

我敢打赌,
ANSWER\u TEXT
列中的数据不会被字符串处理函数转换为有效数字。

如果可以声明一个新函数,最简单的选择可能是执行以下操作

CREATE FUNCTION my_to_number( p_str IN VARCHAR2 )
  RETURN NUMBER
IS
  l_num NUMBER;
BEGIN
  BEGIN
    l_num := to_number( p_str );
  EXCEPTION
    WHEN others THEN
      l_num := NULL;
  END;

  RETURN l_num;
END my_to_number;
然后在查询中使用它

AND my_to_number( hra_ans.answer_text ) >= 10

我敢打赌,
ANSWER\u TEXT
列中的数据不会被字符串处理函数转换为有效数字。

假设数据中没有不能由TRANSLATE处理的字符,你知道为什么仍然会发生错误吗?@mpminnich-我最初的直觉是有些字符没有被TRANSLATE函数处理。如果我们排除这种情况,可能会出现诸如NLS设置之类的问题,因为某些会话使用欧洲NLS设置(小数分隔符是逗号而不是句点),因此会出现间歇性错误。但我倾向于打赌数据本身更有可能存在问题(例如,欧洲用户输入的是13,68,而不是13.68,或者美国用户输入的是1234.68,而您没有处理逗号之类的字符)。我会尝试一下这个函数,如果它行得通,我会接受您的答案。如果没有,我会回来的!:-)谢谢。假设数据中没有不能由TRANSLATE处理的字符,您知道为什么仍然会发生错误吗?@mpminnich-我最初的直觉是,有一些字符不能由TRANSLATE函数处理。如果我们排除这种情况,可能会出现诸如NLS设置之类的问题,因为某些会话使用欧洲NLS设置(小数分隔符是逗号而不是句点),因此会出现间歇性错误。但我倾向于打赌数据本身更有可能存在问题(例如,欧洲用户输入的是13,68,而不是13.68,或者美国用户输入的是1234.68,而您没有处理逗号之类的字符)。我会尝试一下这个函数,如果它行得通,我会接受您的答案。如果没有,我会回来的!:-)谢谢