在列值中获取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。
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 数据做什么。
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。
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 数据做什么。