oracle 全年度值没有为零 为啥还出 ora-01841

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 全年度值没有为零 为啥还出 ora-01841相关的知识,希望对你有一定的参考价值。

select to_date('nsr_date','YYYY-MM-DD') from zd_nsrxx; nsr_date 类型是date类型

附带表中数据图片,请高手指教

oracle全年度值没有为零,还是出现ora-01841,是操作过程出现错误造成的,解决方法如下:

1、首先在电脑中打开SQL Plus,如下图所示。

2、然后在打开的窗口中输入用户名:system,如下图所示。

3、接着输入密码,之前安装时设置的密码,如下图所示。

4、然后输入以下命令:SHOW PARAMETER instance_name。

5、此时就可以看到nstance_name的值了,如下图所示,最后输入:exit退出即可。

参考技术A

出现ora-01841就是日期格式的问题。

比如表:test

其中begindate字段是varchar2型数据

如果写成这样就会报错:

select to_date('begindate','yyyy-mm-dd') from test

所以正确写法为:

select to_date(begindate,'yyyy-mm-dd') from test

结果

参考技术B 首先 如果你后面那个字段是date类型的你这样肯定报错,date to date 有这样写的吗?
其次 为什么select 字段你要加引号 这样就变成 常量转换格式 而不是数据库字段。
如果你里面格式是date的
select to_char(nsr_date,'YYYY-MM-DD') from zd_nsrxx
字符串的
select to_date(nsr_date,'YYYY-MM-DD') from zd_nsrxx本回答被提问者采纳
参考技术C 昏,ORACLE是个什么东西啊
没看明白!

Oracle- 为啥在组合列中显示此错误“ORA-00904: "OUTLET_STATUS": invalid identifier"?

【中文标题】Oracle- 为啥在组合列中显示此错误“ORA-00904: "OUTLET_STATUS": invalid identifier"?【英文标题】:Oracle- Why show this error " ORA-00904: "OUTLET_STATUS": invalid identifier " in combined column?Oracle- 为什么在组合列中显示此错误“ORA-00904: "OUTLET_STATUS": invalid identifier"? 【发布时间】:2017-02-12 05:32:35 【问题描述】:

我想在 oracle 中将两列合并为一列。我已经按照这个链接: this . 查询是:

SELECT T6.ITEM_GROUP_NAME,T7.ZONE_NAME,T5.SR_NAME, T5.SR_ID, T5.MOBILE_NO ,T3.ROUTE_NAME ,T1.OUTLET_NAME, T1.OUTLET_ADDRESS, T1.PROPRITOR_NAME, T1.MOBILE_NUMBER , T2.STATUS || T8.REASON as OUTLET_STATUS,
                    SUM(((T2.ITEM_CTN*T4.FACTOR)+ T2.ITEM_QTY )*T2.OUT_PRICE )AS AMOUNT 
                    FROM T_OUTLET T1 , T_ORDER_DETAIL T2, T_ROUTE T3 , T_ITEM T4 , T_SR_INFO T5 , T_ITEM_GROUP T6 ,T_ZONE T7 , T_NON_PRODUCTIVE_SALES T8
                    WHERE T6.ITEM_GROUP_ID='000200000' and T7.ZONE_ID='Z002' and T5.SR_ID= '174369' and T2.OUTLET_ID=T1.OUTLET_ID AND T3.ROUTE_ID = T2.ROUTE_ID AND T2.STATUS='Y' and T2.ENTRY_DATE= TO_DATE( '11/02/2017','dd/mm/yyyy') and T2.ITEM_ID=T4.ITEM_ID and T8.ENTRY_DATE= TO_DATE( '11/02/2017','dd/mm/yyyy') and T8.SR_ID = '174369' and T2.OUTLET_ID= T8.OUTLET_ID
                    GROUP BY T6.ITEM_GROUP_NAME,T7.ZONE_NAME,T5.SR_NAME, T5.SR_ID, T5.MOBILE_NO ,T2.ENTRY_DATE , T2.OUTLET_ID,T3.ROUTE_NAME ,T1.OUTLET_NAME, T1.OUTLET_ADDRESS, T1.PROPRITOR_NAME, T1.MOBILE_NUMBER , OUTLET_STATUS
                    ORDER BY T1.OUTLET_NAME

但是当我这样做时,它会显示错误:

ORA-00904:“OUTLET_STATUS”:标识符无效

问题出在哪里?

【问题讨论】:

【参考方案1】:

group by 的评估发生在select 之前,因此group by 不知道名为OUTLET_STATUS 的列。

group by 中的OUTLET_STATUS 更改为T2.STATUS || T8.REASON

select
. . .
group by T6.ITEM_GROUP_NAME,
    T7.ZONE_NAME,
    T5.SR_NAME,
    T5.SR_ID,
    T5.MOBILE_NO,
    T2.ENTRY_DATE,
    T2.OUTLET_ID,
    T3.ROUTE_NAME,
    T1.OUTLET_NAME,
    T1.OUTLET_ADDRESS,
    T1.PROPRITOR_NAME,
    T1.MOBILE_NUMBER,
    T2.status || T8.REASON  --here
order by T1.OUTLET_NAME

因此,您的查询变为:

select T6.ITEM_GROUP_NAME,
    T7.ZONE_NAME,
    T5.SR_NAME,
    T5.SR_ID,
    T5.MOBILE_NO,
    T3.ROUTE_NAME,
    T1.OUTLET_NAME,
    T1.OUTLET_ADDRESS,
    T1.PROPRITOR_NAME,
    T1.MOBILE_NUMBER,
    T2.status || T8.REASON as OUTLET_STATUS,
    SUM(((T2.ITEM_CTN * T4.FACTOR) + T2.ITEM_QTY) * T2.OUT_PRICE) as AMOUNT
from T_OUTLET T1,
    T_ORDER_DETAIL T2,
    T_ROUTE T3,
    T_ITEM T4,
    T_SR_INFO T5,
    T_ITEM_GROUP T6,
    T_ZONE T7,
    T_NON_PRODUCTIVE_SALES T8
where T6.ITEM_GROUP_ID = '000200000'
    and T7.ZONE_ID = 'Z002'
    and T5.SR_ID = '174369'
    and T2.OUTLET_ID = T1.OUTLET_ID
    and T3.ROUTE_ID = T2.ROUTE_ID
    and T2.status = 'Y'
    and T2.ENTRY_DATE = TO_DATE('11/02/2017', 'dd/mm/yyyy')
    and T2.ITEM_ID = T4.ITEM_ID
    and T8.ENTRY_DATE = TO_DATE('11/02/2017', 'dd/mm/yyyy')
    and T8.SR_ID = '174369'
    and T2.OUTLET_ID = T8.OUTLET_ID
group by T6.ITEM_GROUP_NAME,
    T7.ZONE_NAME,
    T5.SR_NAME,
    T5.SR_ID,
    T5.MOBILE_NO,
    T2.ENTRY_DATE,
    T2.OUTLET_ID,
    T3.ROUTE_NAME,
    T1.OUTLET_NAME,
    T1.OUTLET_ADDRESS,
    T1.PROPRITOR_NAME,
    T1.MOBILE_NUMBER,
    T2.status || T8.REASON   -- here
order by T1.OUTLET_NAME

【讨论】:

以上是关于oracle 全年度值没有为零 为啥还出 ora-01841的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效

oracle 客户端 ora12560tns协议适配器错误,为啥呢?

为啥这会导致 oracle 错误? ORA-00907

这个Oracle查询为啥会报错:ora-01821 Date format not recognized

为啥 OraOLEDB.Oracle GetRecordSet() 会抛出“ORA-00907:缺少右括号”错误?

尽管列和值匹配,Oracle 给我错误 ORA-00947