oracle cast multiset table 语法演示
来源:互联网 发布:杭州淘宝服装有限公司 编辑:程序博客网 时间:2024/06/09 13:40
处理数据库关系对象组件时会用到这个奇怪的语法,下面参照<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 语法演示
- oracle cast multiset table 语法演示
- 【转】 oracle cast multiset table 语法演示
- oracle cast multiset table 语法演示
- oracle 特殊SQL(TABLE( CAST( MULTISET()
- oracle 特殊SQL(TABLE( CAST( MULTISET()
- oracle的table与cast
- Oracle创建表语句(Create table)语法详解及示例
- Oracle创建表语句(Create table)语法详解及示例
- Oracle创建表语句(Create table)语法详解及示例
- oracle cast 用法
- oracle cast() 函数问题
- oracle cast 用法
- oracle cast 用法
- oracle cast() 函数问题
- Oracle cast函数
- oracle cast 用法
- oracle 转型 cast
- mvel2.0语法指南
- OpenGL学习问题记录
- 台北电脑展2011:英特尔的平板电脑计划
- zeroclipboard --- 让浏览器支持复制黏贴到剪切板
- Hibernate时间操作二
- oracle cast multiset table 语法演示
- android Call WebService with complex types (Android调用复杂类型的WebService)
- 如何在web.xml中引用其它的xml文件
- SharePoint 创建SSP时出现异常,信息如 设置失败: 找不到 Windows NT 用户或组 '【域名】/administrator'。请再次检查该名称。
- 英特尔官方发布Atom N435芯片
- java学习(8)
- delphi中ShellExecute使用详解
- delphi中ShellExecute使用详解
- Linux操作系统下运行命令时Ctrl+C和Ctrl+Z的作用及恢复