http://blog.csdn.net/viszl/article/details/6543158

处理数据库关系对象组件时会用到这个奇怪的语法,下面参照<oracle 编程艺术>中的例子结合嵌套表解释这个语法

首先建立嵌套表

create or replace type emp_type

as object

(empno       number(4),

ename       varchar2(10),

job         varchar2(9),

mgr         number(4),

hiredate    date,

sal         number(7, 2),

comm        number(7, 2)

);

/

create or replace type emp_tab_type

as table of emp_type

/

create table dept_and_emp

(deptno number(2) primary key,

dname     varchar2(14),

loc       varchar2(13),

emps      emp_tab_type

)

nested table emps store as emps_nt;

alter table emps_nt add constraint

emps_empno_unique unique(empno)

/

alter table emps_nt add constraint mgr_fk

foreign key(mgr) references emps_nt(empno);

接下来用emp和dept(scott用户下的表)来填充这个dept_and_emp表(其中emps为嵌套表)

insert into dept_and_emp

select dept.*,

CAST( multiset( select empno, ename, job, mgr, hiredate, sal, comm

from SCOTT.EMP

where emp.deptno = dept.deptno ) AS emp_tab_type )

from SCOTT.DEPT

/

现在可以通过这条语句来理解CAST和MULTISET这个语法

MULTISET关键字用于告诉ORACLE:这个子查询返回的是多行(select列表中的子查询不加multiset限制为返回一行)。

CAST关键字用于指示ORACLE要把返回的结果集处理为一个集合,在这里我们将MULTISET强制转换(CAST)为一个EMP_TAB_TYPE。

CAST是一个通用的例程,并不仅限于在集合中使用。例如,如果想从EMP中将EMPNO列获取为VARCHAR2(20)而不是NUMBER(4),可以使用下面的查询:SELECT CAST(EMPNO AS VARCHAR2(20)) E FROM EMP。

现在可以查询这个dept_and_emp表了,看下结果

select deptno, dname, loc, d.emps AS employees

from dept_and_emp d

where deptno = 10

/

DEPTNO DNAME          LOC

---------- -------------- -------------

EMPLOYEES(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM)

----------------------------------------------------------------------------------------------------

10 ACCOUNTING     NEW YORK

EMP_TAB_TYPE(EMP_TYPE(7782, 'CLARK', 'MANAGER', 7839, '09-6月 -81', 2450, NULL), EMP_TYPE(7839, 'KIN

G', 'PRESIDENT', NULL, '17-11月-81', 5000, NULL), EMP_TYPE(7934, 'MILLER', 'CLERK', 7782, '23-1月 -8

2', 1300, NULL))

所有的数据都放在一个列里,大多数的应用都不能处理这个特殊的列,除非是专门针对对象关系特性编写的,因此oracle提供了一个方法,可以取消集合的嵌套,把它当做是一个关系表来处理:
select d.deptno, d.dname, emp.*
from dept_and_emp D, table(d.emps) emp
/
DEPTNO DNAME               EMPNO ENAME      JOB              MGR HIREDATE              SAL
---------- -------------- ---------- ---------- --------- ---------- -------------- ----------
COMM
----------
10 ACCOUNTING           7782 CLARK      MANAGER         7839 09-6月 -81           2450
10 ACCOUNTING           7839 KING       PRESIDENT            17-11月-81           5000
10 ACCOUNTING           7934 MILLER     CLERK           7782 23-1月 -82           1300
20 RESEARCH             7369 SMITH      CLERK           7902 17-12月-80            800
20 RESEARCH             7566 JONES      MANAGER         7839 02-4月 -81           2975
20 RESEARCH             7788 SCOTT      ANALYST         7566 19-4月 -87           3000
20 RESEARCH             7876 ADAMS      CLERK           7788 23-5月 -87           1100
20 RESEARCH             7902 FORD       ANALYST         7566 03-12月-81           3000
30 SALES                7499 ALLEN      SALESMAN        7698 20-2月 -81           1600
300
30 SALES                7521 WARD       SALESMAN        7698 22-2月 -81           1250
500
30 SALES                7654 MARTIN     SALESMAN        7698 28-9月 -81           1250
1400
30 SALES                7698 BLAKE      MANAGER         7839 01-5月 -81           2850
30 SALES                7844 TURNER     SALESMAN        7698 08-9月 -81           1500
0
30 SALES                7900 JAMES      CLERK           7698 03-12月-81            950
已选择14行。

table()可以把一个集合强制转换成一个表,而且会自然的为我们完成连接,这里不需要连接条件。

oracle cast multiset table 语法演示相关推荐

  1. multiset用法 oracle,oracle cast multiset table 语法演示

    处理数据库关系对象组件时会用到这个奇怪的语法,下面参照中的例子结合嵌套表解释这个语法 首先建立嵌套表 create or replace type emp_type as object (empno ...

  2. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  3. oracle外表日期,三步教会您掌握oracle外表(external table)

    三步教会你掌握oracle外表(external table) 外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有 ...

  4. oracle外表日期,三步教会你掌握oracle外表(external table)

    外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有存放在数据库内,而是存放在了文件系统上.当用户想偶尔使用数据库外 ...

  5. oracle中multiset,集合操作符Multiset

    MULTISET和CAST联合可以将一个结果集转为嵌套表. 下面的信息摘自ORACLE 10G联机文档,仅供参考. Multiset operators combine the results of ...

  6. [转]oracle 存储过程的基本语法 及注意事项

    oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 (     参数1 IN NUMBER,     参数2 IN NUMBER ) ...

  7. oracle+cast函数+长度,oracle cast() 函数问题

    oracle cast() 函数问题 关键字: oracle cast() 函数问题 SQL> create table t1(a varchar(10)); Table created. SQ ...

  8. oracle 数据库 alter table 修改字段

    oracle 数据库 alter table 修改字段 – 更新表名(很少用) alter table tablename RENAME TO newtablename; – 添加字段语法: alte ...

  9. oracle存储过程学习经典[语法+实例+调用]

    Oracle存储过程基础知识 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应 ...

最新文章

  1. 构造函数调用虚函数的问题
  2. Wapiti一款小巧的开源安全测试漏洞检测工具
  3. lsattr/chattr
  4. 好玩的java代码 安卓_各种版本的 玩Android 来啦!
  5. 【ESP8266】安信可8266模组官方文档速查++
  6. 非对称加密算法--RSA加密原理及运用
  7. 计算机科学期刊介绍--各种杂志投稿方式与评价
  8. 外存储器——硬盘存储器
  9. 《可以量化的经济学》凯恩斯主义与…
  10. nyoj-234-吃土豆(动态规划)
  11. Nerv-京东高性能前端框架
  12. 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
  13. tolua++实现分析
  14. 三维旋转(根据转轴和角度)的公式。罗德里格旋转公式
  15. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别
  16. JAVA大华摄像头抓拍与API接口集成
  17. css 单行space-between左右布局,左边元素文字过长显示省略号
  18. mysql配置时区 serverTimeZone
  19. Word2016自第3页开始添加连续页脚(除掉封面和目录)
  20. 漏洞复现_CVE-2020-0796 永恒之黑漏洞_遇坑_已解决

热门文章

  1. 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值”的求解思路与算法示例
  2. 【数据结构与算法】之深入解析“填充每个节点的下一个右侧节点指针”的求解思路与算法示例
  3. 9.Vue 表单输入绑定
  4. Go + Excel 学习 Excelize rows.go
  5. 《算法竞赛入门经典》习题4-3 黑白棋(Othello, ACM、ICPC World Finals 1992, UVa220)
  6. 《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。
  7. Netty实战 IM即时通讯系统(四)服务端启动流程
  8. Java常用API(三)Pattern 正则表达式
  9. 【Linux】一步一步学Linux——init命令(138)
  10. 笔记本平板电脑推荐_ONETALK 亦说便携式平板电脑推荐