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; /
- 使用table()函数查询嵌套表中的数据:
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转换为一个虚拟表,并在查询中使用它。这样,我们就可以像查询普通表一样查询嵌套表中的数据。