在我的实现中使用的一个查询给出了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上接受了解释,但我无法理解它。有人能帮我弄清楚这个问题吗?
发布于 2011-09-15 14:08:39
当尝试将字符串转换为数字,但该字符串无法转换为有效数字时,将发生ORA-01722错误。有效数字包含数字'0‘到'9',可能包含一个小数点、字符串开头或结尾的符号(+或-)或'E’或'e‘(如果它是科学记数法中的浮点数)。所有其他字符都是禁止的。
Pi.oid的类型是什么?它是字符串还是数字。如果它是一个字符串,它可能不能被转换成数字(这意味着它有一些禁止的字符)。
同样,如果pi.oid是一个数字,那么您正在做的事情如下所示
pi.oid = olix.xml_value这是模棱两可的,因为xml_value应该是类似字符串的东西。仔细查看您的查询,并尝试删除与字符串和数字相关的歧义。您的问题将得到解决:)
https://stackoverflow.com/questions/7426488
复制相似问题