Выберите ошибку запроса в Oracle - PullRequest
1 голос
/ 02 апреля 2012

Сначала я создал тип, а затем создал таблицу, а затем вставил 1 строку в таблицу, которая была успешной, но когда я запускаю запрос Выбрать в таблице, я получаю ошибки:

create type My_type as Object
(
fname varchar2(10),
lname varchar2(10)
); 

Теперь создали таблицу

create table My_table 
(
name My_type,
phone number
);

Вставлен ряд

insert into My_table values ( My_type('Abc','Xyz'), 122);

Запустить запрос на выбор

select * from My_table;

Ошибка: ORA-00932: несовместимые типы данных: ожидается, что NUMBER получил OODB.MY_TYPE

select name.fname, name.lname, phone from My_table;

Ошибка: ORA-00904: «ИМЯ». «ИМЯ»: неверный идентификатор

select My_type.fname, My_type.lname, phone from My_table;

Ошибка: ORA-00904: «MY_TYPE». «LNAME»: неверный идентификатор

1 Ответ

1 голос
/ 02 апреля 2012

Если вы используете текущую версию SQL * Plus, это должно работать

SQL> create type My_type as Object ( fname varchar2(10), lname varchar2(10) );
  2  /

Type created.

SQL> create table My_table ( name My_type, phone number );

Table created.

SQL> insert into My_table values ( My_type('Abc','Xyz'), 122);

1 row created.

SQL> column name format a30;
SQL> select * from My_table;

NAME(FNAME, LNAME)                  PHONE
------------------------------ ----------
MY_TYPE('Abc', 'Xyz')                 122

Возможно, что если вы используете действительно старую версию SQL * Plus или если вы используете какой-либо другой клиентский инструмент, клиентский инструмент не знает, как обрабатывать типы объектов.

За пределами классных упражнений вы, как правило, не определяете таблицы с типами объектов в реальном мире. Гораздо более распространено использование типов объектов в коде PL / SQL для упрощения обработки - работа с объектами, которые хранятся как часть модели данных, с другой стороны, вызывает проблемы.

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