在列值中获取varchar

Getting varchar in colum value

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;

当我使用

检索数据时
select * from department1 

我的输出是:

English Lynn Saunders Breakstone Hall 205 VARCHAR(说明文写作、电影与文学、现代科幻小说、散文写作、现代英语语法、莎士比亚导论、现代剧,短篇小说,美国小说)

我不知道并且很困惑,为什么这个 VARCHAR 显示

您只是看到正常方式 SQL 开发人员显示嵌套 table。尽管它显示为嵌套的 table 列名称 (COURSELIST1('Expository Writing', ...)) 而不是 VARCHAR(...),至少在 SQL Developer 4.2 中是这样。如果您 运行 将查询作为语句,那么结果将出现在查询结果 window 中,它也会显示架构名称。不同的客户端可能会选择以其他方式显示嵌套table。

你可以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. 

如果您希望它们作为 comma-separated 字符串,您可以使用 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 

这取决于您想对嵌套的 table 数据做什么。