Oracle中PL/SQL復(fù)合數(shù)據(jù)類型
一、PL/SQL記錄:一條記錄
可簡(jiǎn)化單行多列的數(shù)據(jù)的處理。當(dāng)使用pl/sql記錄時(shí),應(yīng)用開發(fā)人員即可以自定義記錄類型和記錄變量,也可以使用%rowtype屬性直接定義記錄變量。
1、當(dāng)使用自定義的pl/sql記錄時(shí),需要分別定義pl/sql記錄類型和記錄變量。
declare type emp_record_type is record( name emp.ename%type,salary emp.sal%type ); emp_record emp_record_type; begin select ename,sal into emp_record from emp where empno=&no; dbms_output.put_line('雇員名:'||emp_record.name); dbms_output.put_line('雇員工資:'||emp_record.salary); end;
2、使用%rowtype 屬性定義記錄變量
declare emp_record emp%rowtype; begin select * into emp_record from emp where empno=&no; dbms_output.put_line('姓名: '||emp_record.ename); dbms_output.put_line('工資: '||emp_record.sal); end;
二、PL/SQL表:一列數(shù)據(jù)
用于處理單列多行數(shù)據(jù)。類似于一維數(shù)組。PL/SQL表的元素個(gè)數(shù)沒有限制,且下表可為負(fù)數(shù)。
語法如下:
type 表類型 is table of 類型 index by binary_integer; 表變量名 表類型;
index by binary_integer 子句代表以符號(hào)整數(shù)為索引,訪問表類型變量中的數(shù)據(jù)方法就是“表變量名(索引符號(hào)整數(shù))”。可以不按順序賦值,但必須先賦值后使用。
1、使用PL/SQL表處理單列單行數(shù)據(jù)
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin select ename into ename_table(1) from emp where empno=&eno; dbms_output.put_line('雇員名: '||ename_table(1)); end;
2、使用PL/SQL表處理單列多行數(shù)據(jù)
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin select ename bulk collect into ename_table from emp where deptno=&dno; for i in 1..ename_table.count loop dbms_output.put_line('雇員名: '||ename_table(i)); end loop; end;
三、PL/SQL記錄表:多列多行表
用于處理多行多列數(shù)據(jù)。類似于多維數(shù)組。
定義記錄表類型的語法如下:
TYPE table_name IS TABLE OF element_type [NOT NULL] INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];
記錄表中的方法:
- EXISTS(n):如果集合的第n個(gè)成員存在,則返回true
- COUNT:返回已經(jīng)分配了存儲(chǔ)空間即賦值了的成員數(shù)量
- FIRST:返回成員的最低下標(biāo)值
- LAST:返回成員的最高下標(biāo)值
- PRIOR(n):返回下標(biāo)為n的成員的前一個(gè)成員的下標(biāo)。如果沒有則返回NULL
- NEXT(N):返回下標(biāo)為n的成員的后一個(gè)成員的下標(biāo)。如果沒有則返回NULL
- TRIM:刪除末尾一個(gè)成員
- TRIM(n) :刪除末尾n個(gè)成員
- DELETE:刪除所有成員
- DELETE(n) :刪除第n個(gè)成員
- DELETE(m, n) :刪除從n到m的成員
- EXTEND:添加一個(gè)null成員
- EXTEND(n):添加n個(gè)null成員
- EXTEND(n,i):添加n個(gè)成員,其值與第i個(gè)成員相同
- LIMIT:返回在varray類型變量中出現(xiàn)的最高下標(biāo)值
例1:
declare type emp_table_type is table of emp%rowtype index by binary_integer; emp_table emp_table_type; begin select * bulk collect into emp_table from emp where deptno=&dno; for i in 1..emp_table.count loop dbms_output.put_line('雇員名: '||emp_table(i).ename||',工資: '||emp_table(i).sal); end loop; end;
按一維數(shù)組使用表:
DECLARE --定義記錄表數(shù)據(jù)類型 TYPE reg_table_type IS TABLE OF varchar2(25) INDEX BY BINARY_INTEGER; --聲明記錄表數(shù)據(jù)類型的變量 v_reg_table REG_TABLE_TYPE; BEGIN v_reg_table(1) := 'Europe'; v_reg_table(2) := 'Americas'; v_reg_table(3) := 'Asia'; v_reg_table(4) := 'Middle East and Africa'; v_reg_table(5) := 'NULL'; DBMS_OUTPUT.PUT_LINE('地區(qū)名稱:'||v_reg_table (1)||'、' ||v_reg_table (2)||'、' ||v_reg_table (3)||'、' ||v_reg_table (4)); DBMS_OUTPUT.PUT_LINE('第5個(gè)成員的值:'||v_reg_table(5)); END;
四、varry數(shù)據(jù)類型:數(shù)組
具有相同數(shù)據(jù)類型的一組成員的集合,每個(gè)成員都有一個(gè)唯一的下標(biāo)。
定義VARRAY數(shù)據(jù)類型的語法如下:
TYPE VARRAY_NAME IS VARRAY(SIZE) OF ELEMENT_TYPE [NOT NULL];
VARRAY的使用舉例:
DECLARE --定義一個(gè)最多保存5個(gè)VARCHAR(25)數(shù)據(jù)類型成員的VARRAY數(shù)據(jù)類型 TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25); --聲明一個(gè)該VARRAY數(shù)據(jù)類型的變量 v_reg_varray REG_VARRAY_TYPE; BEGIN --用構(gòu)造函數(shù)語法賦予初值 v_reg_varray := reg_varray_type ('中國(guó)', '美國(guó)', '英國(guó)', '日本', '法國(guó)'); DBMS_OUTPUT.PUT_LINE('地區(qū)名稱:'||v_reg_varray(1)||'、' ||v_reg_varray(2)||'、' ||v_reg_varray(3)||'、' ||v_reg_varray(4)); DBMS_OUTPUT.PUT_LINE('賦予初值NULL的第5個(gè)成員的值:'||v_reg_varray(5)); --用構(gòu)造函數(shù)語法賦予初值后就可以這樣對(duì)成員賦值 v_reg_varray(5) := '法國(guó)'; DBMS_OUTPUT.PUT_LINE('第5個(gè)成員的值:'||v_reg_varray(5)); END;
到此這篇關(guān)于Oracle中PL/SQL復(fù)合數(shù)據(jù)類型的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle 解決ORA-00257 Archiver error 報(bào)錯(cuò)問題解決
訂單投資交易環(huán)境進(jìn)行 impdb 數(shù)據(jù)泵恢復(fù)數(shù)據(jù),執(zhí)行到一半,報(bào)錯(cuò)終止,歸檔策略保留時(shí)間較長(zhǎng),或歸檔頻率過高,導(dǎo)致數(shù)據(jù)庫掛載盤符空間不足,本文給大家分享Oracle 解決ORA-00257 Archiver error 報(bào)錯(cuò)問題解決,感興趣的朋友一起看看吧2023-12-12詳解Oracle 中實(shí)現(xiàn)數(shù)據(jù)透視表的幾種方法
這篇文章主要介紹了詳解Oracle 中實(shí)現(xiàn)數(shù)據(jù)透視表的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04oracle聯(lián)機(jī)數(shù)據(jù)庫備份詳解
oracle數(shù)據(jù)庫維護(hù)中,備份或恢復(fù)是重中之重的問題,本文就講一下oracle聯(lián)機(jī)數(shù)據(jù)庫備份的方法2013-11-11ORACLE應(yīng)用經(jīng)驗(yàn)(2)
ORACLE應(yīng)用經(jīng)驗(yàn)(2)...2007-03-03Oracle中執(zhí)行動(dòng)態(tài)SQL
這篇文章介紹了Oracle中執(zhí)行動(dòng)態(tài)SQL的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05基于OGG實(shí)現(xiàn)Oracle實(shí)時(shí)同步MySQL的全過程
這篇文章詳細(xì)闡述了基于OGG實(shí)現(xiàn)Oracle實(shí)時(shí)同步MySQL全過程,文中通過圖文結(jié)合和代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11