我得到一个ORA-01790:表达式必须与相应的表达式错误消息具有相同的数据类型。下面是我正在使用的sql。是CASE语句导致了这个问题吗?我是sql的新手,这是我第一次尝试使用UNION语句。我尝试了连接而不是UNION,但是我尝试的任何连接都会导致prior_amt字段为空。谢谢你的帮助......
SELECT
pa.BUSINESS_UNIT as BUS_UNIT,
pa.DESCR AS DESCRIPT,
pdr.DEPTID AS DEPTID,
pdr.ASSET_ID AS ASSET_NO,
pdr.ACCOUNT_AD AS ACCT_AD,
pdr.BOOK AS BOOK,
MAX(CASE WHEN (pdr.FISCAL_YEAR =2014 AND pdr.ACCOUNTING_PERIOD =11) THEN pdr.DEPR END) as CURRENT_AMT,
MAX(CASE WHEN (pdr.FISCAL_YEAR =2104 AND pdr.ACCOUNTING_PERIOD =10) THEN pdr.DEPR END) as PRIOR_AMT,
'' AS ACCT_DE,
'' AS JRNL_ID,
'' AS JRNL_DT
FROM PS_ASSET pa
INNER JOIN PS_DEPR_RPT pdr
ON pa.ASSET_ID = pdr.ASSET_ID
AND pa.BUSINESS_UNIT = pdr.BUSINESS_UNIT
WHERE
pa.BUSINESS_UNIT='A0465'
AND pdr.BOOK='PERFORM'
AND ((pdr.FISCAL_YEAR=2014 AND pdr.ACCOUNTING_PERIOD=11)
OR (pdr.FISCAL_YEAR=2014 AND pdr.ACCOUNTING_PERIOD=10))
group by
pa.business_unit,
pa.descr,
pdr.deptid,
pdr.asset_id,
pdr.account_ad,
pdr.book
UNION ALL
select
'' as BUS_UNT,
'' AS DESCRIPT,
'' AS DEPTID,
'' AS ACCT_AD,
'' AS BOOK,
'' AS CURRENT_AMT,
'' AS PRIOR_AMT,
pdl.asset_id AS ASSET_NO,
pdl.account AS ACCT_DE,
pdl.journal_id AS JRNL_ID,
pdl.journal_date AS JRNL_DT
from ps_dist_ln pdl
where
book = 'PERFORM'
and business_unit = 'A0465'
and fiscal_year = 2014
and accounting_period = 11
and distribution_type = 'DE'发布于 2014-09-12 05:18:36
您的问题是在联合的每一半中以不同的顺序放置列。列必须以相同的顺序在两半之间匹配。这与CASE表达式无关。
另外,你写的2104应该是2014年了。
发布于 2021-05-28 04:54:02
对于这种错误,我有一个奇怪的情况:
我在特定的行上收到了ORA-01790: expression must have same datatype as corresponding expression错误消息。
示例:
INSERT INTO TABLE_TO_INSERT (
COL_FIELD_1
,COL_FIELD_2
,COL_FIELD_3
,COL_FIELD_4
,COL_FIELD_5
,COL_FIELD_6
)
SELECT 1
,2
,'IMPORT'
,'EXPORT'
,COL_DEXPIRATION ---- > SQL Developer shows ORA-01790 at this error line.
,COL_DEXPIRATION
FROM SOURCE_TABLE_1
UNION
SELECT 1
,2
,'LOADING'
,'SAVING'
,COL_DCONFIRMDATE
,COL_DATTACHMENTDATE
FROM SOURCE_TABLE_2;在我的例子中,错误发生在带有UNION的SELECT语句中;但是,当我进一步检查错误的根源时,错误确实是由于SELECT语句中使用的列的数据类型之间不匹配造成的,但不是在SQL Developer中显示的红色突出显示的行中,而是在下一条SELECT语句中。
我进行了更改,并成功编译了存储过程。
示例:
INSERT INTO TABLE_TO_INSERT (
COL_FIELD_1
,COL_FIELD_2
,COL_FIELD_3
,COL_FIELD_4
,COL_FIELD_5
,COL_FIELD_6
)
SELECT 1
,2
,'IMPORT'
,'EXPORT'
,COL_DEXPIRATION
,COL_DEXPIRATION
FROM SOURCE_TABLE_1
UNION
SELECT 1
,2
,'LOADING'
,'SAVING'
,CAST(COL_DCONFIRMDATE AS VARCHAR2 (500)) -- > The real ORA-01790 was at this line and this was the change made.
,CAST(COL_DATTACHMENTDATE VARCHAR2 (500)) -- > The real ORA-01790 was at this line and this was the change made.
FROM SOURCE_TABLE_2;Oracle TL;DR:很奇怪,请检查突出显示的行之外的错误,并尽可能保持代码的整洁和有序。
https://stackoverflow.com/questions/25797019
复制相似问题