我的实现中使用的查询给出了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进行了解释,但无法理解。有人可以帮我解决问题。
答案 0 :(得分:0)
尝试将字符串转换为数字时,会发生ORA-01722错误,并且无法将字符串转换为有效数字。有效数字包含数字'0'到'9',可能有一个小数点,在字符串的开头或结尾有一个符号(+或 - ),或'E'或'e'(如果是浮点数)科学记数法中的点数)。禁止所有其他角色。
pi.oid的类型是什么??????????是字符串还是数字。可能如果它是一个字符串,它就不能转换为数字(这意味着它有一些禁用的字符)。
再次,如果pi.oid是一个数字,你正在做这样的事情
pi.oid = olix.xml_value
这是不明智的因为xml_value是类似字符串的东西。仔细查看您的查询并尝试消除与字符串和数字相关的歧义。你的问题将得到解决:)