--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.設定配置檔案和啟...