oracle cast multiset table 语法演示
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))
table()可以把一个集合强制转换成一个表,而且会自然的为我们完成连接,这里不需要连接条件。
oracle cast multiset table 语法演示相关推荐
- multiset用法 oracle,oracle cast multiset table 语法演示
处理数据库关系对象组件时会用到这个奇怪的语法,下面参照中的例子结合嵌套表解释这个语法 首先建立嵌套表 create or replace type emp_type as object (empno ...
- Oracle创建表语句(Create table)语法详解及示例
Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...
- oracle外表日期,三步教会您掌握oracle外表(external table)
三步教会你掌握oracle外表(external table) 外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有 ...
- oracle外表日期,三步教会你掌握oracle外表(external table)
外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有存放在数据库内,而是存放在了文件系统上.当用户想偶尔使用数据库外 ...
- oracle中multiset,集合操作符Multiset
MULTISET和CAST联合可以将一个结果集转为嵌套表. 下面的信息摘自ORACLE 10G联机文档,仅供参考. Multiset operators combine the results of ...
- [转]oracle 存储过程的基本语法 及注意事项
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) ...
- oracle+cast函数+长度,oracle cast() 函数问题
oracle cast() 函数问题 关键字: oracle cast() 函数问题 SQL> create table t1(a varchar(10)); Table created. SQ ...
- oracle 数据库 alter table 修改字段
oracle 数据库 alter table 修改字段 – 更新表名(很少用) alter table tablename RENAME TO newtablename; – 添加字段语法: alte ...
- oracle存储过程学习经典[语法+实例+调用]
Oracle存储过程基础知识 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应 ...
最新文章
- 构造函数调用虚函数的问题
- Wapiti一款小巧的开源安全测试漏洞检测工具
- lsattr/chattr
- 好玩的java代码 安卓_各种版本的 玩Android 来啦!
- 【ESP8266】安信可8266模组官方文档速查++
- 非对称加密算法--RSA加密原理及运用
- 计算机科学期刊介绍--各种杂志投稿方式与评价
- 外存储器——硬盘存储器
- 《可以量化的经济学》凯恩斯主义与…
- nyoj-234-吃土豆(动态规划)
- Nerv-京东高性能前端框架
- 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
- tolua++实现分析
- 三维旋转(根据转轴和角度)的公式。罗德里格旋转公式
- 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别
- JAVA大华摄像头抓拍与API接口集成
- css 单行space-between左右布局,左边元素文字过长显示省略号
- mysql配置时区 serverTimeZone
- Word2016自第3页开始添加连续页脚(除掉封面和目录)
- 漏洞复现_CVE-2020-0796 永恒之黑漏洞_遇坑_已解决
热门文章
- 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值”的求解思路与算法示例
- 【数据结构与算法】之深入解析“填充每个节点的下一个右侧节点指针”的求解思路与算法示例
- 9.Vue 表单输入绑定
- Go + Excel 学习 Excelize rows.go
- 《算法竞赛入门经典》习题4-3 黑白棋(Othello, ACM、ICPC World Finals 1992, UVa220)
- 《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。
- Netty实战 IM即时通讯系统(四)服务端启动流程
- Java常用API(三)Pattern 正则表达式
- 【Linux】一步一步学Linux——init命令(138)
- 笔记本平板电脑推荐_ONETALK 亦说便携式平板电脑推荐