Почему я получаю эту ошибку при попытке вставить данные ORA-00904 "PBIRTHDATE" - PullRequest
0 голосов
/ 24 июня 2019

Может кто-нибудь исправить меня, если я делаю какую-либо синтаксическую ошибку при вставке в таблицу со сложным типом данных?

Это мой код:

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 ]

2 голосов
/ 24 июня 2019

Когда вы инициализируете экземпляр типа объекта, вам нужно указать имя типа , а не имя столбца. Вы также должны всегда указывать целевые столбцы в операторе 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 голос
/ 24 июня 2019

Сообщение об ошибке ясно указывает на это:

TO_DATE('33445555', 'MMDDYYY')

Когда я пытаюсь использовать это в запросе при локальном тестировании, я получаю это сообщение об ошибке:

ORA-01843: недопустимый месяц

Указанная вами дата недействительна, поскольку 33-го месяца нет.Попробуйте использовать правильную дату, и ошибка должна исчезнуть:

TO_DATE('06242019', 'MMDDYYYY')
0 голосов
/ 24 июня 2019

Существует проблема в использовании типа и даты:

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

Db Fiddle Demo

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...