首页 > 解决方案 > SQL ORA 935:缺少表达式

问题描述

我已经检查了 SQL 一个小时,但找不到引发错误的原因。我检查了所有可能发生此错误的基本原因,但一无所获。我对 CASE 声明持怀疑态度,但它似乎是正确的。谁能发现问题或指出我的方向?谢谢

INSERT INTO RPT_HOUSEHLDBATCH
         (CUSTOMERKEY,HOUSEHOLDNBR,CUSTOMERTYPE,LASTNAME,FIRSTNAME,ADDRNBR,AddressLine1,AddressLine2,AddressLine3,
         CITYNAME, STATECD, ZIPCD, SCORE, DATECREATED, RUNDATE, TYPECD, PREVIOUSHHLDNBR)
         SELECT CustomerKey,' || in_HHNbr || ', 
         CASE SUBSTR(CUSTOMERKEY,1,1)
    WHEN ''P'' THEN ''I''
    WHEN ''O'' THEN ''B''
   END CASE,
   a.LastName, 
   a.FirstName, 
   AddrNbr, 
   AddressLine1, 
   AddressLine2, 
   AddressLine3,
   Cityname, 
   StateCd,
   ZipCd, 
   2, b.AddDate, SYSDATE, ''' || in_NewUpd || ''', HouseHoldNbr
   FROM rpt_HouseHldBatchwrk a
JOIN PERS b
ON SUBSTR(a.CUSTOMERKEY,2) = b.PersNbr 
   WHERE CUSTOMERKEY = ''P' || in_PersNbr || '''
UNION 
SELECT CustomerKey,' || in_HHNbr || ', 
         CASE SUBSTR(CUSTOMERKEY,1,1)
    WHEN ''P'' THEN ''I''
    WHEN ''O'' THEN ''B''
   END CASE,
   a.LastName, 
   a.FirstName, 
   AddrNbr, 
   AddressLine1, 
   AddressLine2, 
   AddressLine3,
   Cityname, 
   StateCd,
   ZipCd, 
   2, b.AddDate, SYSDATE, ''' || in_NewUpd || ''', HouseHoldNbr
   FROM rpt_HouseHldBatchwrk a
JOIN ORG b
ON SUBSTR(a.CUSTOMERKEY,2) = b.OrgNbr 
   WHERE CUSTOMERKEY = ''O' || in_OrgNbr || '''

标签: sqloracle

解决方案


正如@OldProgrammer 所建议的那样,调试此类语句的一个好策略是减少它。

在您的情况下,我会尝试忽略INSERTSELECT首先运行。

由于它是UNION两个SELECTs 中的一个,所以我也将它们分成单独的语句。

in_NewUpdandin_PersNbr看起来很奇怪,就像过程中的参数一样。我会用固定的已知值替换它们,比如WHERE CUSTOMERKEY LIKE ''P1234''

请不要将 SQL 存储在变量中并根据条件执行它。其语法是使用?SQL 中的占位符而不是字符串连接||。如果你做错了,你会淹没游标缓存。


推荐阅读