[20241118]invalid date 0000-00-00(zero year)的输入.txt --//昨天看了链接:https://www.anbob.com/archives/8511.html,类似的问题以前我也遇到过,我记忆里第一次在toad下,如果在浏 --//览数据模式,点击显示0000-00-00的grid会报错,提示invalid date。 --//我一直不明白这些日期输入如何输入的,在sqlplus下无法输入。最后只能认为一个程序OCI接受这些输入。 --//不过作者提供在sqlplu输入的方式,测试看看。 1.环境: SCOTT@book01p> @ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.测试: SCOTT@book01p> create table test2(ct date); Table created. SCOTT@book01p> insert into test2 values (0); insert into test2 values (0) * ERROR at line 1: ORA-00932: inconsistent datatypes: expected DATE got NUMBER SCOTT@book01p> insert into test2 values(to_date('00000000','yyyymmdd')); insert into test2 values(to_date('00000000','yyyymmdd')) * ERROR at line 1: ORA-01843: not a valid month SCOTT@book01p> select to_date('0000-00-00','yyyy-mm-dd'); select to_date('0000-00-00','yyyy-mm-dd') * ERROR at line 1: ORA-00923: FROM keyword not found where expected --//与我以前测试类似,sqlplus下无法插入0000-00-00日期。 --//按照日期的转换格式计算RAW换算方法,'0000-00-00 00:00:00'拼接RAW 后是100,100,0,0,1,1,1, 转换为16进制是64640000010101。 WITH FUNCTION display_raw(rawval RAW, type VARCHAR2) RETURN VARCHAR2 IS cn NUMBER; cv VARCHAR2(128); cd DATE; cnv NVARCHAR2(128); cr ROWID; cc CHAR(128); BEGIN IF (type = 'NUMBER') THEN dbms_stats.convert_raw_value(rawval, cn); RETURN to_char(cn); ELSIF (type = 'VARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cv); RETURN to_char(cv); ELSIF (type = 'DATE') THEN dbms_stats.convert_raw_value(rawval, cd); RETURN to_char(cd); ELSIF (type = 'NVARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cnv); RETURN to_char(cnv); ELSIF (type = 'ROWID') THEN dbms_stats.convert_raw_value(rawval, cr); RETURN to_char(cr); ELSIF (type = 'VARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cc); RETURN to_char(cc); ELSE RETURN 'UNKNOWN DATATYPE'; END IF; END; select display_raw('64640000010101','DATE') x from dual; / X ------------------------------ 0000-00-00 00:00:00 WITH FUNCTION display_raw(rawval RAW, type VARCHAR2) RETURN VARCHAR2 IS cn NUMBER; cv VARCHAR2(128); cd DATE; cnv NVARCHAR2(128); cr ROWID; cc CHAR(128); BEGIN IF (type = 'NUMBER') THEN dbms_stats.convert_raw_value(rawval, cn); RETURN to_char(cn); ELSIF (type = 'VARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cv); RETURN to_char(cv); ELSIF (type = 'DATE') THEN dbms_stats.convert_raw_value(rawval, cd); RETURN to_char(cd); ELSIF (type = 'NVARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cnv); RETURN to_char(cnv); ELSIF (type = 'ROWID') THEN dbms_stats.convert_raw_value(rawval, cr); RETURN to_char(cr); ELSIF (type = 'VARCHAR2') THEN dbms_stats.convert_raw_value(rawval, cc); RETURN to_char(cc); ELSE RETURN 'UNKNOWN DATATYPE'; END IF; END; insert into test2 select display_raw('64640000010101','DATE') x from dual; / insert into test2 select display_raw('64640000010101','DATE') x from dual * ERROR at line 34: ORA-00928: missing SELECT keyword --//oracle不支持这样写法,不知道写错在哪里。 create or replace function stats_raw_to_date (p_in raw) return date is v_date date; v_char varchar2(25); begin dbms_stats.CONVERT_RAW_VALUE(p_in, v_date); return v_date; exception when others then return null; end; / SCOTT@book01p> insert into test2 select stats_raw_to_date('64640000010101') x from dual; 1 row created. SCOTT@book01p> commit ; Commit complete. SCOTT@book01p> select * from test2; CT ------------------- 2024-11-18 09:58:22 0000-00-00 00:00:00 --//21c也提供dbms_stats.CONVERT_RAW_TO_DATE函数。 SCOTT@book01p> @ desc_proc sys dbms_stats CONVERT_RAW_to_% INPUT OWNER PACKAGE_NAME OBJECT_NAME sample : @desc_proc sys dbms_stats gather_%_stats OWNER PACKAGE_NAME OBJECT_NAME SEQUENCE ARGUMENT_NAME DATA_TYPE IN_OUT DEFAULTED ---------- ------------ ------------------------------ ---------- ------------- ------------- --------- ---------- SYS DBMS_STATS CONVERT_RAW_TO_VARCHAR2 1 VARCHAR2 OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_DATE 1 DATE OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_NUMBER 1 NUMBER OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_BIN_FLOAT 1 BINARY_FLOAT OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_BIN_DOUBLE 1 BINARY_DOUBLE OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_NVARCHAR 1 NVARCHAR2 OUT N 2 RAWVAL RAW IN N CONVERT_RAW_TO_ROWID 1 ROWID OUT N 2 RAWVAL RAW IN N 14 rows selected. --//有了这些函数方便多了,以前11g版本仅仅有dbms_stats.convert_raw_value,而且返回值保存在第2个参数里面。 --//于是才有了上面的函数display_raw。 SCOTT@book01p> select dbms_stats.CONVERT_RAW_TO_DATE('64640000010101') from dual ; DBMS_STATS.CONVERT_ ------------------- 0000-00-00 00:00:00 SCOTT@book01p> insert into test2 select dbms_stats.CONVERT_RAW_TO_DATE('64640000010101') from dual ; 1 row created. SCOTT@book01p> commit ; Commit complete. SCOTT@book01p> select * from test2 where ct=dbms_stats.CONVERT_RAW_TO_DATE('64640000010101'); CT ------------------- 0000-00-00 00:00:00 0000-00-00 00:00:00 --//顺便提一下目前的toad 12.7版本,显示的是 0001/1/1. select dump(ct,16) c10 ,test2.* from test2 C10 CT -------------------------------- --------------------- Typ=12 Len=7: 78,7c,b,12,a,3b,17 2024-11-18 09:58:22 Typ=12 Len=7: 64,64,0,0,1,1,1 0001-01-01 00:00:00 Typ=12 Len=7: 64,64,0,0,1,1,1 0001-01-01 00:00:00 已选择 3 行。
[20241118]invalid date 0000-00-00(zero year)的输入.txt
来源:这里教程网
时间:2026-03-03 20:55:33
作者:
编辑推荐:
- oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?03-03
- [20241118]invalid date 0000-00-00(zero year)的输入.txt03-03
- 一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!03-03
- [20241118]NLS_LANG设置问题2.txt03-03
- 湖南家具铂金钻奢石餐桌,简约与优雅的完美融合03-03
- 使用逻辑备库的方式进行数据库升级03-03
- 07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线03-03
- [20241120]NOT NULL约束与Check( xx is not null)约束.txt03-03
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
26-03-03 - 一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
26-03-03 - 湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
26-03-03 - 07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线
- 湖南家具大黑牛沙发,舒适与品质的完美邂逅
湖南家具大黑牛沙发,舒适与品质的完美邂逅
26-03-03 - 实战分享:如何在HP-UX上高效扩容Oracle 12c RAC ASM磁盘
- 湖南家具沙丘床,塑造精妙绝伦的卧室空间格调
湖南家具沙丘床,塑造精妙绝伦的卧室空间格调
26-03-03 - Oralce数据库巡检SQL脚本
Oralce数据库巡检SQL脚本
26-03-03 - 从CAB到PAB Oracle的AI 23.6(之一)
从CAB到PAB Oracle的AI 23.6(之一)
26-03-03 - 数据库管理-第257期 有好故事才能讲好故事(20241101)
数据库管理-第257期 有好故事才能讲好故事(20241101)
26-03-03
