sql - 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 || '''
解决方案
正如@OldProgrammer 所建议的那样,调试此类语句的一个好策略是减少它。
在您的情况下,我会尝试忽略INSERT
并SELECT
首先运行。
由于它是UNION
两个SELECT
s 中的一个,所以我也将它们分成单独的语句。
in_NewUpd
andin_PersNbr
看起来很奇怪,就像过程中的参数一样。我会用固定的已知值替换它们,比如WHERE CUSTOMERKEY LIKE ''P1234''
请不要将 SQL 存储在变量中并根据条件执行它。其语法是使用?
SQL 中的占位符而不是字符串连接||
。如果你做错了,你会淹没游标缓存。
推荐阅读
- micronaut - 如何在 Micronaut 中定义自定义端点路径?
- rabbitmq - 我可以在运行时更新 AMQP 设置吗?
- tensorflow - Tensorflow Federated-Learning 是否仅用于在一台机器上模拟联邦学习?
- asp.net-web-api - 如何从 webapi 获取数据集作为响应
- typescript - Typescript - 如何获取类型化数组?
- angular - 类型“[]”上不存在属性“名称”
- react-native - 如何在 React Native 中使用多个 Stack Navigator?
- php - 更新实体对象时无法在 foreach 循环外调用 entityManager->flush()
- canjs - 如何从动态生成的表单元素中获取值
- kotlin - 发行人赎回另一方持有的可替代代币