Oracle的table()函数是一种将集合类型转换为关系表的方法,它可以将用户自定义的数据类型(如嵌套表、VARRAY等)转换为一个虚拟表,从而在SQL查询中使用
CREATE TYPE emp_list AS TABLE OF NUMBER;
/
CREATE TABLE dept (
deptno NUMBER,
dname VARCHAR2(30),
loc VARCHAR2(30),
emps emp_list
) NESTED TABLE emps STORE AS emps_nt;
/
INSERT INTO dept VALUES (10, 'HR', 'New York', emp_list(1, 2, 3));
INSERT INTO dept VALUES (20, 'IT', 'San Francisco', emp_list(4, 5, 6));
INSERT INTO dept VALUES (30, 'Finance', 'Los Angeles', emp_list(7, 8, 9));
COMMIT;
/
SELECT d.deptno, d.dname, d.loc, e.column_value AS empno
FROM dept d, TABLE(d.emps) e;
这个查询将返回以下结果:
DEPTNO DNAME LOC EMPNO
------ -------------- --------------- ----------
10 HR New York 1
10 HR New York 2
10 HR New York 3
20 IT San Francisco 4
20 IT San Francisco 5
20 IT San Francisco 6
30 Finance Los Angeles 7
30 Finance Los Angeles 8
30 Finance Los Angeles 9
在这个例子中,我们首先创建了一个名为emp_list的嵌套表类型,然后创建了一个包含该类型的表dept。接着,我们向dept表中插入了一些数据。最后,我们使用table()函数将嵌套表emps转换为一个虚拟表,并在查询中使用它。这样,我们就可以像查询普通表一样查询嵌套表中的数据。