2012-04-02 4 views
1

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

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: несовместимые типы данных: ожидаемое число получил OODB.MY_TYPE

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

Ошибка: ORA-00904:. "NAME" "LName": недопустимый идентификатор

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

Ошибка: ORA-00904: "my_type" "LNAME":. Недопустимый идентификатор

+1

Какой клиент вы используете для выполнения этих запросов? –

+0

Я использую Oracle 10g Express Edition на моем ПК с Windows XP дома –

ответ

1

Если вы используете текущую версию 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 для упрощения обработки - с объектами, которые хранятся как часть модели данных, с другой стороны, имеет тенденцию быть проблематичным.

+0

Что такое «формат имени столбца a30»; я набрал это, но он говорит «Недопустимые операторы SQL» –

+1

@ R122 - Это команда SQL * Plus, а не оператор SQL. Он просто сообщает SQL * Plus отображать данные в столбце «NAME», используя 30 символов. Если вы его опустите, вывод в SQL * Plus потенциально будет перенесен на следующую строку. Но похоже, что вы не используете SQL * Plus. –

+0

Превосходный мужчина! для "формат имени столбца a30;" но на этот раз я использовал sql * plus и запрос select был успешным, но когда я пытаюсь использовать его на главной странице базы данных (т. е. обозреватель объектов и все), она дает выше ошибку, как упоминалось в моем вопросе ....... Итак, почему же запрос выполняется в sql * plus и не использует домашнюю страницу Oracle Database Home? –

Смежные вопросы