2017-02-03 6 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 

내 출력을 사용하여 데이터입니다 검색 할 때 : 현대

영어 린 손더스 푸는 문제 홀 (205) VARCHAR (해설 쓰기, 영화와 문학을, 공상 과학 소설, 서면 쓰기, 현대 영어 문법, 셰익스피어 소개, 현대 연극, 단편 소설, 미국 소설)

VARCHAR 당신은 그냥 일반적인 방법 SQL Developer를보고있는

+0

편집 주셔서 감사합니다.이 또한 나를 도울 수 있습니다. –

답변

0

을 보여주는 왜 인식하고, 혼란 스러워요 중첩 테이블을 보여줍니다. 적어도 SQL Developer 4.2에서는 VARCHAR(...)이 아닌 중첩 테이블 열 이름 (COURSELIST1('Expository Writing', ...))으로 표시됩니다. 명령문을 쿼리로 실행하면 결과가 대신 쿼리 결과 창에 표시되므로 스키마 이름도 표시됩니다. 다른 클라이언트는 다른 방법으로 중첩 테이블을 표시하도록 선택할 수 있습니다.

할 수 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

Alex에게 감사드립니다. –

+0

음! 내가 listagg 기능을 사용하면 출력을 얻을 수 없다, 그것 때문에 만기 버전, 나는 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0을 사용하고 있습니다 - 생산 –

+0

@SriRockz - 그게 무슨 뜻입니까? 결과가 나타나지 않거나 다른 열의 값이 있지만 해당 표현식이나 잘라낸 출력 또는 다른 것에 대한 값이있는 행을 볼 수 있습니까? –