2017-02-03 3 views
0
CREATE TYPE CourseList1 AS TABLE OF VARCHAR2(64); 
/

CREATE TABLE department1 
(
    name  VARCHAR2(20), 
    director VARCHAR2(20), 
    office VARCHAR2(20), 
    courses1 CourseList1) 
    NESTED TABLE courses1 STORE AS courses_tab1; 
    /

    BEGIN 
    INSERT INTO department1 
     VALUES('English', 'Lynn Saunders', 'Breakstone Hall 205', 
     CourseList1('Expository Writing', 
        'Film and Literature', 
        'Modern Science Fiction', 
        'Discursive Writing', 
        'Modern English Grammar', 
        'Introduction to Shakespeare', 
        'Modern Drama', 
        'The Short Story', 
        'The American Novel')); 
END; 

Когда я получить данные с помощьюПолучение VARCHAR стоимости Колум

select * from department1 

Мой результат:

Английский Lynn Saunders Щебень Hall 205 VARCHAR (описательного письма, кино и литература, Современная Научная фантастика, дискурсивное письмо, современная английская грамматика, введение в Шекспир, современная драма, короткая история, американский роман)

Я не знаю и смущен, почему это VARCHAR показывает

+0

Спасибо, юрген за редактирование..пожалуйста, помогите мне и на этом –

ответ

0

Вы просто видите нормальный способ SQL Developer показывает вложенную таблицу. Хотя он отображается как имя столбца вложенной таблицы (COURSELIST1('Expository Writing', ...)), а не VARCHAR(...), по крайней мере, в SQL Developer 4.2. Если вы запустите запрос в качестве инструкции, чтобы результаты отображались в окне результатов запроса, оно также отображает имя схемы. Различные клиенты могут отображать вложенную таблицу другими способами.

Вы можете unnest your nested table:

select d.name, d.director, d.office, t.column_value as course 
from department1 d 
cross join table(courses1) t; 

NAME     DIRECTOR    OFFICE    COURSE               
-------------------- -------------------- -------------------- ---------------------------------------------------------------- 
English    Lynn Saunders  Breakstone Hall 205 Expository Writing            
English    Lynn Saunders  Breakstone Hall 205 Film and Literature            
English    Lynn Saunders  Breakstone Hall 205 Modern Science Fiction           
English    Lynn Saunders  Breakstone Hall 205 Discursive Writing            
English    Lynn Saunders  Breakstone Hall 205 Modern English Grammar           
English    Lynn Saunders  Breakstone Hall 205 Introduction to Shakespeare          
English    Lynn Saunders  Breakstone Hall 205 Modern Drama              
English    Lynn Saunders  Breakstone Hall 205 The Short Story             
English    Lynn Saunders  Breakstone Hall 205 The American Novel            

9 rows selected. 

Если вы хотите их как разделенный запятыми строку, которую вы можете использовать listagg() для генерации, что:

select d.name, d.director, d.office, 
    listagg(t.column_value, ',') within group (order by t.column_value) as courses 
from department1 d 
cross join table(courses1) t 
group by d.name, d.director, d.office; 

NAME     DIRECTOR    OFFICE    COURSES                                            
-------------------- -------------------- -------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
English    Lynn Saunders  Breakstone Hall 205 Discursive Writing,Expository Writing,Film and Literature,Introduction to Shakespeare,Modern Drama,Modern English Grammar,Modern Science Fiction,The American Novel,The Short Story 

Это зависит от того, что вы хотите сделать с вложенным таблица данных действительно.

+0

Спасибо Алекс за ответ. –

+0

Хорошо! я не могу получить выход при использовании функции listagg, это из-за версии, я использую Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production –

+0

@SriRockz - что это значит - вы не видите никаких результаты, или вы видите строки со значениями для других столбцов, но ничего для этого выражения или усеченный вывод или что-то еще? –