【发布时间】:2019-10-31 19:46:05
【问题描述】:
每当我尝试运行以下查询时都会收到此异常。我想提一下,这是我第一次使用 union sql 子句。
<Oct 31, 2019 1:05:24 PM EET> <Notice> <Stdout> <BEA-000000> <2019-10-31 13:05:24.312 ERROR 21053 --- [ (self-tuning)'] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-01790: expression must have same datatype as corresponding expression>
<Oct 31, 2019 1:05:24 PM EET> <Notice> <Stdout> <BEA-000000> <2019-10-31 13:05:24.324 ERROR 21053 --- [ (self-tuning)'] o.s.boot.web.support.ErrorPageFilter : Forwarding to error page from request [/api/selling/gdp] due to exception [Database problem: org.hibernate.exception.SQLGrammarException: could not extract ResultSet]
com.example.btbsc.error.BadRequestAlertException: Database problem: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
我已经在 stackoverflow 上尝试过类似的问题,但仍然无法弄清楚我的问题出在哪里。
查询:
SELECT H_DATE,
CUSTOMER_NO,
FULL_NAME,
PRODUCT_CODE,
PRODUCT_NAME,
OPENING_DATE,
CLOSING_DATE,
UNIT_ID,
UNIT_NAME,
SUC_ID,
HEADQ_NAME,
CUSTOMER_TYPE
FROM bt_nmp.PACHETE_MICRO_IMM
WHERE H_DATE = :p_H_DATE
AND CUSTOMER_NO = NVL(:p_customer_no,CUSTOMER_NO)
AND ( :p_opening_date is null OR OPENING_DATE = :p_opening_date )
AND CUSTOMER_TYPE IN (
select nvl(:p_cust_categ,CUSTOMER_TYPE) as CUST_CATEG from dual
UNION
SELECT EXTRACTVALUE (t.COLUMN_VALUE, '/e') AS CUST_CATEG
FROM (select :p_cust_categ as CUST_CATEG from dual) m,
TABLE(
XMLSEQUENCE(
xmltype(
'<e><e>' || REPLACE (m.CUST_CATEG, ',', '</e><e>') || '</e></e>'
).EXTRACT('e/e')
)
) t
)
AND NVL(PRODUCT_NAME,'-') IN (
select nvl(:p_prod_list,NVL(PRODUCT_NAME,'-')) as PROD_LIST from dual
UNION
SELECT EXTRACTVALUE (t.COLUMN_VALUE, '/e') AS PROD_LIST
FROM (select :p_prod_list as PROD_LIST from dual) m,
TABLE(
XMLSEQUENCE(
xmltype(
'<e><e>' || REPLACE (m.PROD_LIST, ',', '</e><e>') || '</e></e>'
).EXTRACT('e/e')
)
) t
)
AND (:p_unit_id is null or UNIT_ID = :p_unit_id)
ORDER BY CUSTOMER_NO ASC,H_DATE DESC
【问题讨论】:
-
请edit 提出minimal reproducible example 的问题,包括表的DDL 语句;复制问题的一些示例数据的 DML 语句;您正在使用的绑定变量的详细信息;样本数据的预期输出;以及您尝试应用的逻辑的英文描述(因为它并不总是容易遵循纯代码问题)。