首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导致ORA-01790的案例:表达式必须与相应的表达式错误具有相同的数据类型

导致ORA-01790的案例:表达式必须与相应的表达式错误具有相同的数据类型
EN

Stack Overflow用户
提问于 2014-09-12 05:11:50
回答 2查看 55K关注 0票数 8

我得到一个ORA-01790:表达式必须与相应的表达式错误消息具有相同的数据类型。下面是我正在使用的sql。是CASE语句导致了这个问题吗?我是sql的新手,这是我第一次尝试使用UNION语句。我尝试了连接而不是UNION,但是我尝试的任何连接都会导致prior_amt字段为空。谢谢你的帮助......

代码语言:javascript
运行
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-12 05:18:36

您的问题是在联合的每一半中以不同的顺序放置列。列必须以相同的顺序在两半之间匹配。这与CASE表达式无关。

另外,你写的2104应该是2014年了。

票数 20
EN

Stack Overflow用户

发布于 2021-05-28 04:54:02

对于这种错误,我有一个奇怪的情况:

我在特定的行上收到了ORA-01790: expression must have same datatype as corresponding expression错误消息。

示例:

代码语言:javascript
运行
复制
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;

在我的例子中,错误发生在带有UNIONSELECT语句中;但是,当我进一步检查错误的根源时,错误确实是由于SELECT语句中使用的列的数据类型之间不匹配造成的,但不是在SQL Developer中显示的红色突出显示的行中,而是在下一条SELECT语句中。

我进行了更改,并成功编译了存储过程。

示例:

代码语言:javascript
运行
复制
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:很奇怪,请检查突出显示的行之外的错误,并尽可能保持代码的整洁和有序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25797019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档