Oracle 21c SQL Plus中Post表日期时间字段报错求助
问题解决:Oracle 21c建表及日期格式插入方案
错误原因分析
- Oracle 不支持
TEXT数据类型(这是MySQL等数据库的类型),这是导致"invalid datatype"错误的核心原因。 - Oracle 没有
DATETIME类型,你使用的TIMESTAMP是合法的,但被TEXT的错误掩盖了;另外Oracle推荐用VARCHAR2替代VARCHAR。
修正后的建表语句
将TEXT替换为Oracle支持的CLOB(用于存储大文本内容),同时调整字符类型为VARCHAR2:
CREATE TABLE Post( post_id INTEGER PRIMARY KEY, title VARCHAR2(60), post_time TIMESTAMP, content CLOB, username VARCHAR2(20), FOREIGN KEY(username) REFERENCES Users(username) );
指定格式插入数据方法
要按DD-MM-YYYY hh:mm:ss格式插入时间,需用TO_TIMESTAMP函数将字符串转换为时间戳类型:
INSERT INTO Post(post_id, title, post_time, content, username) VALUES( 1, '示例标题', TO_TIMESTAMP('01-10-2024 14:30:00', 'DD-MM-YYYY HH24:MI:SS'), '这是一篇测试内容', 'demo_user' );
- 注意:
HH24表示24小时制,若用12小时制需替换为HH并补充AM/PM标识(如'DD-MM-YYYY HH:MI:SS AM')。
可选:全局设置会话日期格式
如果不想每次插入都写转换函数,可以临时修改会话的时间戳格式:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-MM-YYYY HH24:MI:SS';
之后直接插入字符串格式的时间即可:
INSERT INTO Post(post_id, title, post_time, content, username) VALUES(2, '第二篇标题', '02-10-2024 15:45:00', '第二篇内容', 'demo_user');
内容的提问来源于stack exchange,提问作者Confused Coder
相关产品推荐
相关产品推荐

