You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 21c SQL Plus中Post表日期时间字段报错求助

问题解决:Oracle 21c建表及日期格式插入方案

错误原因分析

  1. Oracle 不支持 TEXT 数据类型(这是MySQL等数据库的类型),这是导致"invalid datatype"错误的核心原因。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:32:15