日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle cast multiset table 语法演示

發布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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))

所有的數據都放在一個列里,大多數的應用都不能處理這個特殊的列,除非是專門針對對象關系特性編寫的,因此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 语法演示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。