执行以下查询时出现ORA-01722错误

时间:2011-09-15 06:02:16

标签: oracle-sqldeveloper

我的实现中使用的查询给出了ORA-01722错误。以下是查询。

select ao.account_oid,ao.website_oid,ob.oid,ob.status_code,pi.oid,pi.render_status,ao.invoiced_date
from acct_order ao,order_basket ob, order_line_item oli,order_line_item_xml olix,project_info pi
where ao.oid = ob.account_order_oid and       
  ob.oid = oli.order_basket_oid and
  oli.oid = olix.order_line_item_oid and
  pi.oid = olix.xml_value and 
  olix.xml_key_code='PROJECT_INFO_OID' and      
  pi.oid = 10000450011; // this is not working

注意:“olix.xml_value”也可能包含字符串值。

我通过将“=”运算符替换为“in”运算符来修改它并尝试,即使这样也失败了。 但是如果“in”运算符的值不大于1,那么它的工作原理。

select ao.account_oid,ao.website_oid,ob.oid,ob.status_code,pi.oid,pi.render_status,ao.invoiced_date
from acct_order ao,order_basket ob, order_line_item oli,order_line_item_xml olix,project_info pi
where ao.oid = ob.account_order_oid and       
  ob.oid = oli.order_basket_oid and
  oli.oid = olix.order_line_item_oid and
  pi.oid = olix.xml_value and 
  olix.xml_key_code='PROJECT_INFO_OID' and      
  pi.oid in (10000450011,10000460011); // This is working. One argument to "in" operator is not working.

所以我对SQLDeveloper进行了解释,但无法理解。有人可以帮我解决问题。

1 个答案:

答案 0 :(得分:0)

尝试将字符串转换为数字时,会发生ORA-01722错误,并且无法将字符串转换为有效数字。有效数字包含数字'0'到'9',可能有一个小数点,在字符串的开头或结尾有一个符号(+或 - ),或'E'或'e'(如果是浮点数)科学记数法中的点数)。禁止所有其他角色。

pi.oid的类型是什么??????????是字符串还是数字。可能如果它是一个字符串,它就不能转换为数字(这意味着它有一些禁用的字符)。

再次,如果pi.oid是一个数字,你正在做这样的事情

pi.oid = olix.xml_value

这是不明智的因为xml_value是类似字符串的东西。仔细查看您的查询并尝试消除与字符串和数字相关的歧义。你的问题将得到解决:)