原始碼 Oracle資料庫管理 第十四章 記錄與集合

2021-12-30 02:26:47 字數 4774 閱讀 2517

--14.2.6 資料庫中的巢狀表

--**14.22 建立巢狀表

--建立乙個巢狀表型別,用來儲存員工的姓名

create or replace type tbl_emp_name as table of varchar2(20);

--建立乙個使用巢狀列型別的列的表,用來儲存部門和員工名稱資訊。

create table dept_and_emp(

deptno number(2) primary key, --部門編號

dname varchar2(14), --部門名稱

loc varchar2(13), --部門位址

emps tbl_emp_name --員工列表

nested table emps store as emps_nt;--巢狀表儲存位置

--**14.23 對包含巢狀表列的表執行dml語句

declare

--定義巢狀表變數,使用建構函式初始化了6個元素

emp_list tbl_emp_name

:= tbl_emp_name ('史密斯', '傑克', '馬丁', '史達林', '布希', '小平');

begin

--可以在insert語句中傳入乙個巢狀表例項

insert into dept_and_emp

values (10,'行政部', '北京', emp_list);

--也可以直接在insert語句中例項化巢狀表

insert into dept_and_emp

values (20, '財務司','上海', tbl_emp_name ('李林', '張杰', '馬新', '蔡文'));

--對巢狀表進行更新,然後使用update語句將巢狀表例項更新回資料庫

emp_list(1) := '張三';

emp_list(2) := '李四';

emp_list(3) := '王五';

emp_list(4) := '趙六';

emp_list(5) := '丁七';

emp_list(6) := '劉八';

--使用更改過的emp_list更新巢狀表列

update dept_and_emp

set emps = emp_list

where deptno = 10;

--從資料庫表中查詢出巢狀表例項

select emps into emp_list from dept_and_emp where deptno=10;

for v_index in 1..emp_list.count loop

dbms_output.put_line(emp_list(v_index));

end loop;

dbms_output.put_line('演示如何從其他表中插入巢狀表列的值:');

--清除表中所有的資料

delete from dept_and_emp;

--使用insert select語句,插入dept表中所有的記錄,使用cast和multiset將emp表中的ename作為巢狀表列的元素

insert into dept_and_emp

select dept.*,

cast(multiset

(select ename from emp where emp.deptno = dept.deptno) as

tbl_emp_name)

from dept;

--查詢部門編號為20的記錄

select emps into emp_list from dept_and_emp where deptno =10;

--輸出部門編號為20的巢狀表的元素值

for v_index in 1 .. emp_list.count loop

dbms_output.put_line(emp_list(v_index));

end loop;

end;

select d.deptno, d.dname, emp.*

from dept_and_emp d, table(d.emps) emp

where d.deptno = 10;

--14.2.7 定義變長陣列

--**14.24 定義並使用變長陣列

declare

--定義乙個變長陣列,它最大儲存10個元素,元素為varchar2型別

type t_ename_list is varray(10) of varchar2(20);

--定義乙個變長陣列變數,並且使用建構函式對其進行初始化

lst_ename t_ename_list:=t_ename_list('張三','李四','王五');

begin

--迴圈顯示變長陣列中的元素值

for v_index in 1..lst_ename.count loop

dbms_output.put_line(lst_ename(v_index));

end loop;

end;

--14.2.8 操作變長陣列

--**14.25 操作變長陣列

declare

--定義變長陣列型別

type t_dept_name is varray(10) of varchar2(20);

type t_dept_no is varray(8) of number;

--宣告變長陣列型別的變數

varray_deptname_tab t_dept_name := t_dept_name('行政部','管理部');

varray_deptno_tab t_dept_no;

begin

--檢查變長陣列是否被初始化,否則呼叫建構函式進行初始化

if varray_deptno_tab is null then

varray_deptno_tab:=t_dept_no(10,20,30,null,null,null);

end if;

--對varray_deptname_tab進行擴充套件和收縮

varray_deptname_tab.extend(5); --在原有的5個元素的基礎上擴充2個元素,現在具有7個元素

dbms_output.put_line('當前varray_deptname_tab個數:'||varray_deptname_tab.count);

varray_deptname_tab.trim; --刪除變長陣列中的最後乙個元素,現在有6個元素

dbms_output.put_line('當前varray_deptname_tab個數:'||varray_deptname_tab.count);

--varray_deptname_tab(7):='社會發展部';--丟擲ora-06533異常,下標越界

varray_deptname_tab.extend; --擴充套件乙個元素

varray_deptname_tab(7):='社會發展部'; --再次賦值,現在正常賦值

dbms_output.put_line(varray_deptname_tab(7));

--這行**超過了變長陣列最大長度,oracle丟擲ora-06533異常

--varray_deptno_tab.extend(5);

end;

--14.2.9 資料庫中的變長陣列

--**14.26 建立並使用變長陣列型別

--建立乙個變長陣列的型別empname_varray_type,用來儲存員工資訊

create or replace type force empname_varray_type is varray (20) of varchar2 (20);

create table dept_varray --建立部門資料表

deptno number(2), --部門編號

dname varchar2(20), --部門名稱/--部門員工列表

emplist empname_varray_type

drop table dept_varray;

--**14.27 運算元據庫中的變長陣列

declare --宣告並初始化變長陣列

emp_list empname_varray_type

:= empname_varray_type ('史密斯', '傑克', '湯姆', '麗沙', '簡', '史太龍');

begin

insert into dept_varray

values (20, '維修組', emp_list); --向表中插入變長陣列資料

insert into dept_varray --直接在insert語句中初始化變長陣列資料

values (30, '機加工',

empname_varray_type ('張3', '劉七', '趙五', '阿4', '阿五', '阿六'));

select emplist

into emp_list

from dept_varray

where deptno = 20; --使用select語句從表中取出變長陣列資料

emp_list (1) := '傑克張'; --更新變長陣列資料的內容

update dept_varray

set emplist = emp_list

where deptno = 20; --使用update語句更新變長陣列資料

delete from dept_varray

where deptno = 30; --刪除記錄並同時刪除變長陣列資料

end;

select * from dept_varray;

oracle資料庫管理

當乙個oracle 例項建立了之後,會自動建立 system 和sys使用者 區別 對於兩者之間的區別,就類似 sys 使用者是董事長,system 使用者是總經理 具體的區別如下 儲存的資料的重要性不同 sys 所有的oracle 的資料字典的基表和動態檢視都存放在 sys使用者中,這些基表和檢視...

linux redis 資料庫 原始碼安裝

一 redis介紹 redis是remote dictionary server的縮寫。他本質上乙個key value資料庫,與memcached類似的nosql型資料庫,但是他的資料可以持久化的儲存在磁碟上,解決了服務重啟後資料不丟失的問題,他的值可以是string 字串 list 列表 sets...

原始碼編譯mariadb資料庫

開始安裝 步驟 環境配置 1.防火牆 2.selinux配置 3.mysql使用者 4.安裝開發工具 5.建立資料庫檔案,並使用者 組修改許可權 編譯過程 6.解壓包 7.編譯三步驟 8.給主程式包 basedir 修改使用者 組許可權 9.設定環境變數 10.生成資料庫檔案 11.設定配置檔案和啟...