为什么在尝试插入数据时出现此错误ORA-00904“ PBIRTHDATE”

时间:2019-06-24 12:36:47

标签: sql oracle

如果我在插入具有复杂数据类型的表时遇到语法错误,有人可以纠正我吗?

这是我的代码:

CREATE TYPE ADDR AS OBJECT (
    street VARCHAR2(32),
    city VARCHAR2(32),
    zip NUMBER(32)
);

CREATE TYPE NAMES AS OBJECT(
    firstname VARCHAR2(64),
    lastname VARCHAR2(64)
);

CREATE TABLE PERSON(
    pid NUMBER(10),
    pname NAMES,
    paddr ADDR,
    pbirthdate DATE
);

INSERT INTO PERSON
VALUES (1, pname('John','Doe'), paddr('None','Test',51050), TO_DATE('33445555', 'MMDDYYY'));

3 个答案:

答案 0 :(得分:2)

初始化对象类型的实例时,需要指定类型名称,而不是列名称。您还应该始终在INSERT语句中指定目标列。

INSERT INTO PERSON 
  (pid, pname, paddr, pbirthdate)
VALUES 
  (1, names('John','Doe'), addr('None','Test',51050), TO_DATE('33445555', 'MMDDYYY'));
      ^                    ^ 
      | here               | here

此外,33445555是给定格式掩码MMDDYYY'的无效日期

答案 1 :(得分:1)

错误消息明确指出:

TO_DATE('33445555', 'MMDDYYY')

当我在本地测试时尝试在查询中使用它时,出现以下错误消息:

  

ORA-01843:无效的月份

您指定的日期无效,因为没有第33个月。尝试使用有效日期,该错误应消失:

TO_DATE('06242019', 'MMDDYYYY')

答案 2 :(得分:0)

TYPE用法和日期存在问题

INSERT INTO PERSON
VALUES (1, NAMES('John','Doe'), ADDR('None','Test',51050), TO_DATE('06242019', 'MMDDYYYY'));

Db Fiddle Demo

干杯!