数据集合 oracle,oracle集合
oracle集合
1初識集合
集合是oracle中的一種數據類型 存放一組數據類型相同的數據
集合組成
由下標和值組成
下標的類型包含數字(整數,pls_integer,binary_integer)和字符串
值的類型可以是數據庫中的所有類型(基本數據類型,記錄類型(record,%rowtype),%type,集合類型)
集合三種類型
索引表可以通過數字或字符串作為下標來查找其中的元素,僅在pl/sql中使用
嵌套表擁有索引表的所有特性,但是下標只能是數字類型(連續的整數)
可以在plsql中使用也可以在數據庫中使用
變長數組下標只能是數字類型,創建時需要指定最大長度
可以在plsql中使用也可以在數據庫中使用
2索引表類型
2.1語法
定義一個索引表類型
type 類型名稱 is table of 元素值的數據類型 index by 下標的數據類型;
索引變量的聲明
變量名 類型名;
索引變量的使用
變量名(下標);
2.2簡單使用declare
--定義一個索引表類型
type itype is table of varchar2(30) index by pls_integer;
--聲明一個集合變量
ind itype;
begin
ind(1):='張三';
ind(4):='李四';
dbms_output.put_line(ind(4)||','||ind(1));
end;
輸出李四,張三
3集合的屬性或方法
3.1屬性或方法簡單匯總first取集合第一個元素的下標
last取集合元素最后一個元素的下標
next(下標)取集合當前下標的下一個元素的下標
prior(下標)取集合當前下標的上一個元素的下標
count取集合中元素的個數
delete刪除集合中的元素
limit取集合最大的元素的個數(變長數組)
3.2屬性或方法示例declare
--定義一個集合類型
type itype is table of varchar2(30) index by varchar2(30);
--聲明一個索引表
eng itype;
begin
--給索引表賦值
eng('a'):='張三';
eng('b'):='李四';
eng('c'):='王五';
eng('d'):='趙六';
--打印集合中第一個元素的下標
dbms_output.put_line('第一個元素的下標: '||eng.first);
--打印集合中最后一個一個元素的下標
dbms_output.put_line('最后一個元素的下標: '||eng.last);
--打印集合中第二個元素的下標
dbms_output.put_line('第二個元素的下標: '||eng.next(eng.first));
--打印集合中倒數第二個元素的下標
dbms_output.put_line('倒數第二個元素的下標: '||eng.prior(eng.last));
--打印集合中元素的個數
dbms_output.put_line('元素個數: '||eng.count);
end;
輸出第一個元素的下標: a
最后一個元素的下標: d
第二個元素的下標: b
倒數第二個元素的下標: c
元素個數: 4declare
--定義一個集合類型
type itype is table of varchar2(30) index by varchar2(10);
--定義一個變量保存集合的下標
v_ind varchar(10);
--聲明一個索引表
eng itype;
begin
--給索引賦值
eng('a'):='張三';
eng('b'):='李四';
eng('c'):='王五';
eng('d'):='趙六';
--遍歷打印集合中的元素
--將第一個元素的下標放入變量v_ind中
v_ind:=eng.first;
loop
--打印集合元素
dbms_output.put_line(eng(v_ind));
--判斷退出條件,當下標的值等于最后一個下標的值
exit when v_ind=eng.last;
--循環控制語句
v_ind:=eng.next(v_ind);
end loop;
end;
輸出:張三
李四
王五
趙六
4bulk collect語句循環遍歷
集合提供了bulk collect語句獲取表中數據
通過bulk colleck語句存入集合中的元素下標從1開始并且是連續的
4.1語法1
select 列.. bulk collect into 集合變量 from 表 where條件
獲取emp表中30部門中的員工號和姓名declare
--定義索引表集合存儲emp表中empno和ename
type i_empno is table of emp.empno%type index by pls_integer;
type i_ename is table of emp.ename%type index by pls_integer;
--定義索引變量
eno i_empno;
eme i_ename;
begin
--bull collect語句獲取empno和ename
select empno,ename bulk collect into eno,eme from emp where deptno=30;
for i in eno.first..eno.last loop
dbms_output.put_line(eno(i)||eme(i));
end loop;
end;
輸出7499ALLEN
7521WARD
7654MARTIN
7698BLAKE
7844TURNER
7900JAMES
4.2語法2
execute immediate 'select語句' bulk collect into 集合變量
獲取emp表中30部門中的員工號和姓名declare
--聲明一個變量存放selqct查詢結果
v_sql varchar2(255);
--定義索引表集合存儲emp表中empno和ename
type i_empno is table of emp.empno%type index by pls_integer;
type i_ename is table of emp.ename%type index by pls_integer;
--定義索引變量
eno i_empno;
eme i_ename;
begin
--將sql語句賦值給v_sql
v_sql:='select empno,ename from emp where deptno=30';
--bulk collect語句,將v_sql查詢到的結果放到eno和eme中
execute immediate v_sql bulk collect into eno,eme;
--循環打印eno和eme中所有的數據
for i in eno.first..eme.last loop
dbms_output.put_line(eno(i)||eme(i));
end loop;
end;
輸出7499ALLEN
7521WARD
7654MARTIN
7698BLAKE
7844TURNER
7900JAMES
4.3語法3
fetch 游標 bulk collect into 集合變量
獲取emp表中30部門中的員工號和姓名declare
--聲明一個游標
cursor cur is select empno,ename from emp where deptno=30;
--聲明集合,存放empno和ename
type i_empno is table of emp.empno%type index by pls_integer;
type i_ename is table of emp.ename%type index by pls_integer;
--聲明索引變量
eno i_empno;
eme i_ename;
begin
--打開游標
open cur;
--bulk collect語句,將cur查詢到的結果放到eno和eme中
fetch cur bulk collect into eno,eme;
--關閉游標
close cur;
--循環打印出eno和eme集合中的所有數據
for i in eno.first..eno.last loop
dbms_output.put_line(eno(i)||','||eme(i));
end loop;
end;
輸出7499,ALLEN
7521,WARD
7654,MARTIN
7698,BLAKE
7844,TURNER
7900,JAMES
總結
以上是生活随笔為你收集整理的数据集合 oracle,oracle集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle dbms lob,如何使用
- 下一篇: oracle判断侦听状态,oracle