【问题标题】:Oracle Insert Multiple Value Shows Error MessageOracle 插入多个值显示错误消息
【发布时间】:2013-03-18 12:04:17
【问题描述】:
INSERT ALL
into instructor values (
835, 'SPARKS', 4000 , 200, 978, '16-12-1984')

into instructor values (
978, 'STEEL', 5000 , 250, 222, '16-01-1980')

原来是这样:

INSERT ALL
into instructor values (
835, 'SPARKS', 4000 , 200, 978, '16-DEC-1984')

into instructor values (
978, 'STEEL', 5000 , 250, 222, '16-JAN-1980')

表存在且设置正确。 错误消息显示 ORA-01843: not a valid month。 我哪里做错了?

谢谢

【问题讨论】:

标签: insert oracle11g sqldatetime


【解决方案1】:

您正在为 DATE 类型的列提供 string

在这种情况下,Oracle 会根据NLS_DATE_FORMAT 将字符串隐式转换为日期 - 请参阅此sqlfiddle example

这样做的正确方法是Valex suggested 或这样:

INSERT ALL
into instructor values (
835, 'SPARKS', 4000 , 200, 978,date '1984-12-16')
into instructor values (
978, 'STEEL', 5000 , 250, 222, date '1980-01-16')
SELECT * from DUAL;

【讨论】:

    【解决方案2】:

    使用月份作为 3 个字母字符而不是数字而不是 12 使用 dec

    【讨论】:

      【解决方案3】:

      只需使用TO_DATE 将字符串转换为日期

      INSERT ALL
      into instructor values (
      835, 'SPARKS', 4000 , 200, 978,TO_DATE('16-12-1984','DD-MM-YYYY'))
      into instructor values (
      978, 'STEEL', 5000 , 250, 222,TO_DATE('16-01-1980','DD-MM-YYYY'))
      SELECT * from DUAL;
      

      【讨论】:

        【解决方案4】:

        你正在尝试插入 DATE 而不提及格式,因此 oracle 使用其默认 DATE 来自DD-MON-YYYY

        你可以试试SQL Fiddle

        【讨论】:

        • 这不准确,Oracle Date 没有格式,也没有错误格式。问题是他给出的是字符串而不是日期,所以 oracle 必须转换它。为此,它使用 NLS_DATE_FORMAT 参数(AFAIK 确实有你提到的默认值)
        猜你喜欢
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        相关资源
        最近更新 更多