Oracle ORA-01722:无效的数字,但数据类型为date,它不会以任何方式接受它
还有一个问题,就是不能搞清楚 我的问题是:Oracle ORA-01722:无效的数字,但数据类型为date,它不会以任何方式接受它,oracle,Oracle,还有一个问题,就是不能搞清楚 我的问题是: SELECT s.user_id, date_time, to_char(Date_time, 'DD-MON-YYYY HH24:MI:SS') timestamp, ( SELECT DECODE FROM ( SELECT DECODE, code FROM codelist_decode WHERE codel
SELECT
s.user_id,
date_time,
to_char(Date_time, 'DD-MON-YYYY HH24:MI:SS') timestamp,
( SELECT DECODE
FROM ( SELECT DECODE, code
FROM codelist_decode
WHERE codelist_id = 5029
AND language_code = 001
) t5
WHERE t5.code = s.operation_type)
AS operation,
( SELECT t1.module_name_internal
FROM ( SELECT module_name_internal, module_id
FROM aris_admin_module
) t1
WHERE s.module_id = t1.module_id
)
AS module,
t.session_id,
t.seq_admin_audit_trail,
t.record_id,
( SELECT t4.field_name_e
FROM ( SELECT field_name_e, admin_field_id
FROM aris_admin_table_field
) t4
WHERE admin_field_id = t.field_id)
AS field_name,
( SELECT t2.DECODE
FROM ( SELECT DECODE, code
FROM aris_admin_audit_decode
WHERE field_id = t.field_id
) t2
WHERE t2.code = to_number(t.old_value))
AS org_value_yn,
t.old_value,
( SELECT t3.DECODE
FROM ( SELECT DECODE, code
FROM aris_admin_audit_decode
WHERE field_id = t.field_id
) t3
WHERE t3.code = to_number(t.new_value))
AS new_value_yn
,t.new_value
FROM
system_admin_audit_session s,
system_admin_audit_trail t
WHERE s.session_id = t.session_id
--order by TO_NUMBER('s.session_id','9999999999')
--or order by to_date(s.date_time)
order by 2
上述操作会产生错误:
ORA-01722:无效号码
172200000-“无效号码”
*原因:指定的数字无效。
*操作:指定一个有效的数字
我试过在其他几个专栏上订购,但都是同一个问题。
如果我简化查询,它可以正常工作:
select s.user_id,s.date_time
from ARISG_PROD.system_admin_audit_session s
order by 2 desc
那么为什么它不承认我的datetime为date并接受订单呢?让我们看看我是否能在这里帮助您。 通常,将字符串与数字进行比较时可能会发生这种错误 例如,如果s.module_id是varchar2,t1.module_id被定义为一个数字,那么下面的语句
s.module_id = t1.module_id
可能是根本原因
我建议您注释掉主select语句中的所有子查询,并尝试查询是否发生错误
一旦错误消失,您就必须分析比较语句。或者将其发布到此处,我们将查看一下如果
s.date\u time
已经是日期数据类型,请不要在其上使用to\u date()
。这意味着Oracle需要执行到VARCHAR2的隐式转换,然后返回到最新版本。如果要删除日期列的时间部分,请改用trunc()
。我还尝试将alias放在表的子查询上,但仍然不起作用。但是,我可以不使用解码部分,所以这很好。谢谢你的帮助。(我还是不太明白:o)我猜是这里的转换把事情搞砸了:t2.code=to_number(t.old_value))@kristian这里还有3个嫌疑犯:1)代码列表_id=5029;2) 语言代码=001;3) field\u id=t.field\u id试着与所有的4个人一起玩,只是一步一步地把他们注释掉。你会找到那个混蛋的!另外3个很好用,我只需要过滤掉2到0的数字转换。我可以在没有解码的情况下使用输出:)@kristian很高兴听到我的想法有帮助。