【发布时间】:2021-02-01 14:03:48
【问题描述】:
我有一个随机生成的问题(在千分之一的调用之间出现一次)。错误ORA-01722:在准备好的语句Oracle数据库中执行sql更新时随机生成无效数字。
虽然我认为我的代码是正确的,但它也显示错误,所以请告诉我我错在哪里。
这是我的代码:
select *
from
(
select p.*, SD.GLORGANIZATION
from EXT.INNOVA_STANDING_ORDER_PAYMENT p , EXT.STANDINGORDER_DEFINITION SD,PRM.PRM_CORP_STANDING_ORDER_DEF SOD
where p.status=1 and p.transfersequence in (?) and p.sirano=?
and p.paymentstatus in ( ? )
AND P.CORPORATION=SOD.INNOVACODE AND P.SERVICEINFO=SD.SUBSCRIBERNO AND SD.CORPORATECODE=SOD.CODE AND SD.ORDERSTATU IN ('22') AND SD.STATUS=1
AND P.DUEDATE=? and P.CORPORATION not in ('10000','203','500','501','405','213')
union all
select p.*, SD.GLORGANIZATION
from EXT.INNOVA_STANDING_ORDER_PAYMENT p , EXT.STANDINGORDER_DEFINITION SD,PRM.PRM_CORP_STANDING_ORDER_DEF SOD
where p.status=1 and p.transfersequence in (?) and p.sirano=?
and p.paymentstatus in ( ? )
AND P.CORPORATION=SOD.INNOVACODE AND P.SERVICEINFO=SD.SUBSCRIBERNO2 || SD.SUBSCRIBERNO AND SD.CORPORATECODE=SOD.CODE AND SD.ORDERSTATU IN ('22') AND SD.STATUS=1
AND P.DUEDATE=? and P.CORPORATION in ('203','213','221')
union all
select p.*, SD.GLORGANIZATION
from EXT.INNOVA_STANDING_ORDER_PAYMENT p , EXT.STANDINGORDER_DEFINITION SD,PRM.PRM_CORP_STANDING_ORDER_DEF SOD
where p.status=1 and p.transfersequence in (?) and p.sirano=?
and p.paymentstatus in ( ? )
AND P.CORPORATION=SOD.INNOVACODE AND P.SERVICEINFO=SD.SUBSCRIBERNO AND
P.CORPACCOUNTID=SD.CORPACCOUNTID AND
SD.CORPORATECODE=SOD.CODE AND SD.ORDERSTATU IN ('22') AND SD.STATUS=1
AND P.DUEDATE=? and P.CORPORATION in ('500','501')
union all
select p.*, SD.GLORGANIZATION
from EXT.INNOVA_STANDING_ORDER_PAYMENT p , EXT.STANDINGORDER_DEFINITION SD,PRM.PRM_CORP_STANDING_ORDER_DEF SOD
where p.status=1 and p.transfersequence in (?) and p.sirano=?
and p.paymentstatus in ( ? )
AND P.CORPORATION=SOD.INNOVACODE AND P.SERVICEINFO=SD.SUBSCRIBERNO AND
P.SERVICEINFO2=to_number(SD.SUBSCRIBERNO2) AND SD.CORPORATECODE=SOD.CODE AND SD.ORDERSTATU IN ('22') AND SD.STATUS=1
AND P.DUEDATE=? and P.CORPORATION in ('405') AND SD.CORPORATECODE='405'
union all
select p.*, SD.GLORGANIZATION
from ( SELECT iso.*
FROM EXT.INNOVA_STANDING_ORDER_PAYMENT iso
WHERE iso.CORPORATION IN('10000')
ORDER BY iso.billnumber )p, EXT.STANDINGORDER_DEFINITION SD, PRM.PRM_CORP_STANDING_ORDER_DEF SOD
WHERE p.status = 1
AND P.CORPORATION = SOD.INNOVACODE
AND P.SERVICEINFO = SD.SUBSCRIBERNO
AND P.SERVICEINFO2 = TO_NUMBER( SD.SUBSCRIBERNO2 )
AND SD.CORPORATECODE = SOD.CODE
AND SD.ORDERSTATU IN('22')
AND SD.STATUS = 1
AND P.CORPORATION IN('10000'))q
【问题讨论】:
-
此错误发生在您尝试将字符串转换为数字时,字符串无法转换为数字