Rumah pangkalan data tutorial mysql oracle数组类型简单实例介绍

oracle数组类型简单实例介绍

Jun 07, 2016 pm 05:46 PM
jenis tatasusunan

本文章详细的介绍了关于oracle数组的各种操作,有需要的同学可以参考一下。

本文章详细的介绍了关于oracle数组的各种操作,有需要的同学可以参考一下。

Oracle数组一般可以分为固定数组和可变数组
 固定数组 
 
 

 代码如下 复制代码
declare 
 type v_ar is varray(10) of varchar2(30);  
 my_ar v_ar:=v_ar('g','m','d','龚','帅');  
 begin 
       for i in 1..my_ar.count 
       loop  
           dbms_output.put_line(my_ar(i));  
       end loop;  
 end; 
 declare
 type v_ar is varray(10) of varchar2(30);
 my_ar v_ar:=v_ar('g','m','d','龚','帅');
 begin
       for i in 1..my_ar.count
       loop
           dbms_output.put_line(my_ar(i));
       end loop;
 end;
 
 --可变数组
 --一维数组
 
 declare 
 type v_table is table of varchar2(30) index by binary_integer;  
 --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引,  
 --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。  
 my_table v_table;  
 begin 
       for i in 1..20  
       loop  
           my_table(i):=i;  
           dbms_output.put_line(my_table(i));  
       end loop;  
 end; 
 declare
 type v_table is table of varchar2(30) index by binary_integer;
 --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引,
 --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。
 my_table v_table;
 begin
       for i in 1..20
       loop
           my_table(i):=i;
           dbms_output.put_line(my_table(i));
       end loop;
 end;
 
 --多维数组--多条记录
 
 
 declare 
 type v_table is table of t_user%rowtype index by binary_integer;  
 my_table v_table;  
 begin 
       * bulk collect into my_table from t_user;  
       for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值  
       loop  
           dbms_output.put_line('suser--'||my_table(i).suser);  
          dbms_output.put_line('name---'||my_table(i).name);  
           dbms_output.put_line('sex----'||my_table(i).sex);  
       end loop;  
 end; 
 declare
 type v_table is table of t_user%rowtype index by binary_integer;
 my_table v_table;
 begin
       select * bulk collect into my_table from t_user;
       for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值
       loop
           dbms_output.put_line('suser--'||my_table(i).suser);
           dbms_output.put_line('name---'||my_table(i).name);
           dbms_output.put_line('sex----'||my_table(i).sex);
       end loop;
 end;
 
 多维数组--单条记录
 
 
 declare 
 type v_table is table of t_user%rowtype index by binary_integer;  
 my_table v_table;  
 begin 
       select * into my_table(9) from t_user where suser='admin';  
      --my_table(i) i可以为任意整数,但取值时必须保持以i一致;  
       dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name);   
 end; 
 declare
 type v_table is table of t_user%rowtype index by binary_integer;
 my_table v_table;
 begin
       select * into my_table(9) from t_user where suser='admin';
       --my_table(i) i可以为任意整数,但取值时必须保持以i一致;
       dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name);
 end;
 
 --自定义数组
 
 create or replace type varray_list as varray(30) of varchar2(50);  
 --使用自定义数组  
 create or replace procedure show_list(p_varlist in varray_list)  
 is 
 v_str varchar2(50);  
 begin 
       for i in 1..p_varlist.count   
       loop  
           v_str:=p_varlist(i);  
           dbms_output.put_line('v_str='||v_str);  
           dbms_output.put_line('p_varlist('||i||')='||p_varlist(i));  
       end loop;  
 end;  
  
 declare 
 my_var varray_list:=varray_list('g','m','d','龚','帅');  
 begin 
       show_list(my_var);   
 end;

实例

 代码如下 复制代码

--固定数组
declare
  type type_array is varray(10) of varchar2(20);
  var_array type_array:=type_array('ggs','jjh','wsb','csl','dd','bb');
begin
  for i in 1..var_array.count loop
      dbms_output.put_line(var_array(i));
  end loop;
end;

--可变数组
declare
  type type_array is table of varchar2(20) index by binary_integer;
  var_array type_array;
begin
  var_array(1):='aa';
  var_array(2):='bb';
 
  for i in 1..var_array.count loop
     dbms_output.put_line( var_array(i));
  end loop;
 
end;

--可变数组取表
declare
begin
 
end;

create or replace procedure proc_stock(n number)
as    
       var_stock_code varchar2(10);
       var_stock_price number;
begin
       for i in 1..n loop
           var_stock_code:= lpad(STR1 =>i ,LEN =>6 ,PAD =>'0' ) ;
          
           var_stock_price:=trunc(dbms_random.value*100)+1;
           --dbms_output.put_line(var_stock_code);
           --dbms_output.put_line(var_stock_price);
           insert into t_stock (stockcode,stockprice)
                  values(var_stock_code,var_stock_price);
           commit;      
       end loop;
end;
declare
begin
       proc_stock(1000000);
end;
--用游标访问 14.578秒 13.5 13.8
declare
       cursor cur is select * from t_stock;
       row_stock t_stock%rowtype;
begin
       open cur;
       loop
            fetch cur into row_stock;
            exit when cur%notfound;
            null;
       end loop;
       close cur;
end;

--用数组实现 4.813 1.953 2
declare
       type type_array is table of t_stock%rowtype index by binary_integer;
       var_array type_array;
begin
       select * bulk collect into var_array from t_stock;
       for i in 1..var_array.count loop         
           null;
       end loop;
end;

--访问自定义表
declare
       type type_record is record(
            username varchar2(20),
            sex varchar2(2)
       );
       type_record_user  type_record;
       type type_array is table of type_record_user%type index by binary_integer;
       var_array type_array;      
begin
       select username,sex bulk collect into var_array from tuser;
       for i in 1..var_array.count loop
           dbms_output.put_line(var_array(i).username);
           dbms_output.put_line(var_array(i).sex);
       end loop;
end;

关于ORACLE中的数组:记录同集合
集合可以有三种实现方式:
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY OF VARCHAR2(20);


1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY(52) OF VARCHAR2(20);

不能使用如下:
CREATE TYPE 类型名 AS VARRAY(52) OF 表名%ROWTYPE;
注意:使用VARRAY时一定要先指定数组大小
不然搞创建数组类型

2 内嵌表如:
 TYPE 类型名 IS TABLE OF 具体类型如:(表名%ROWTYPE);
 内嵌表数组分二种:Index_by表同嵌套表如上的就是嵌套表而Index_by表只要在其尾回上 INDEX BY

BINARY_INTEGER就可以了
例子:

 代码如下 复制代码
declare
cursor cur_test is select id,mc from test;
type t_test1 is table of varchar2(60) index by binary_integer;
type t_test2 is table of test%rowtype index by binary_integer;
var_test1 t_test1;
var_test2 t_test2;
var_new t_test2;
begin
SELECT id,mc INTO var_test2(0) FROM test WHERE id='111';
dbms_output.put_line('var_test2(0):'||var_test2(0).id||'---'||var_test2(0).mc);
SELECT id,mc INTO var_test2(8) FROM test WHERE id='333';
dbms_output.put_line('var_test2(8):'||var_test2(8).id||'---'||var_test2(8).mc);
var_new := var_test2;
dbms_output.put_line('===== copy var_test2 to var_new =====');
dbms_output.put_line('var_new(0):'||var_new(0).id||'---'||var_new(0).mc);
dbms_output.put_line('var_new(8):'||var_new(8).id||'---'||var_new(8).mc);
end;
===================================================================================
DECLARE
TYPE t_test1 IS TABLE OF test.id%TYPE;
TYPE t_test2 IS VARRAY (10) OF test.id%TYPE;
var_test1 t_test1;
var_test2 t_test2;
begin
--var_test1(1) := ('test1.1'); --没有初始化不能赋值
var_test1 := t_test1('test1.1','test1.2','test1.3');
dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3));
var_test2 := t_test2('test2.1','test2.2','test2.3');
dbms_output.put_line('var_test2: '||var_test2(1)||','||var_test2(2)||','||var_test2(3));
var_test1(2) := 'test1.2_update';
dbms_output.put_line('==== 修改了var_test1(2) ====');
dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3));
dbms_output.put_line(var_test1.next(3));
dbms_output.put_line('var_test2元素个数: '||var_test2.limit());
end;


嵌套表的元素可以是集合,注意赋值的时候是varray_element.record_column := 的形式.
除了构造函数外,集合还有很多内建函数,按照面向对象编成的叫法称之为方法。
方法==========描述====================================================================使用限


COUNT=========返回集合中元素的个数
DELETE========删除集合中所有元素
DELETE(x)=====删除元素下标为x的元素===================================================对

VARRAY非法
DELETE(x,y)===删除元素下标从X到Y的元素================================================对

VARRAY非法
EXIST(x)======如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND========在集合末尾添加一个元素==================================================对

Index_by非法
EXTEND(x)=====在集合末尾添加x个元素===================================================对

Index_by非法
EXTEND(x,n)===在集合末尾添加元素n的x个副本============================================对

Index_by非法
FIRST=========返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST==========返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT.
LIMIT=========返回VARRY集合的最大的元素个数

===========================================Index_by集合和嵌套表无用
NEXT(x)=======返回在第x个元素之后及紧挨着它的元素的值,如果x是最后一个元素,返回null.
PRIOR(x)======返回在第x个元素之前紧挨着它的元素的值,如果x是第一个元素,则返回null。
TRIM==========从集合末端开始删除一个元素==============================================对于

index_by不合法
TRIM(x)=======从集合末端开始删除x个元素===============================================对

index_by不合法
********************************************************************************************
记录可以定义为:
TYPE 类型名 IS RECORDER (具休类型)
也可用:变量名 表名%ROWTYPE
例子:

隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与表,

视图,游标有相同结构的记录。
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或中的:old

和:new记录

 代码如下 复制代码
declare
t_record1 test%rowtype;
cursor cur_test(v_id in varchar2) is
select id,mc from test
where id t_record2 cur_test%rowtype;
begin
for row_test in cur_test('333') loop
t_record1.id := row_test.id;
t_record1.mc := row_test.mc;
t_record2.id := row_test.id;
t_record2.mc := row_test.id;
dbms_output.put_line('t_record1:'||t_record1.id||'---'||t_record1.mc);
dbms_output.put_line('t_record2:'||t_record2.id||'---'||t_record2.mc);
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);
dbms_output.put_line('================loop '||cur_test%rowcount||' times.');
end loop;
exception when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
======================================================================================
declare
type t_record is record
(
id test.id%type,
mc test.mc%type
);
var_record t_record;
counter number default 0;
begin
for row_test in (select id,mc from test) loop
counter := counter + 1;
var_record.id := row_test.id;
var_record.mc := row_test.mc;
dbms_output.put_line('var_record:'||var_record.id||'---'||var_record.mc);
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);
dbms_output.put_line('================loop '||counter||' times.');
end loop;
exception when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;


三、综合实例BULK COLLECT的用法

 代码如下 复制代码

*/

set serverout on
DECLARE
TYPE t_record IS RECORD (
id number(18,0),
mc varchar2(50)
);
var_record t_record;
type t_test is table of t_record;
var_test t_test := t_test();
cursor cur_test is select id,mc from test;
begin
open cur_test;
fetch cur_test BULK COLLECT INTO var_test;
for i in 1..var_test.count() loop
dbms_output.put_line(var_test(i).id||'---'||var_test(i).mc);
end loop;
end;

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah jenis tatasusunan php? Apakah jenis tatasusunan php? Jun 01, 2023 am 10:41 AM

Terdapat dua jenis tatasusunan PHP, iaitu: 1. Tatasusunan indeks, subskrip terdiri daripada nombor, bermula dari 0 secara lalai, setiap nombor sepadan dengan kedudukan elemen tatasusunan dalam tatasusunan 2. Tatasusunan bersekutu, subskrip terdiri daripada nilai berangka dan aksara Ia terdiri daripada campuran rentetan Jika nama kunci dalam tatasusunan bukan nombor, maka tatasusunan itu ialah tatasusunan bersekutu.

Berapa banyak jenis data yang terdapat dalam tatasusunan php Berapa banyak jenis data yang terdapat dalam tatasusunan php Jun 06, 2023 pm 03:41 PM

Jenis data dalam tatasusunan PHP dibahagikan kepada tiga kategori: jenis skalar, jenis komposit dan jenis khas Lapan sub-kategori ialah: 1. boolean, jenis Boolean 3. float, jenis titik terapung; juga dikenali sebagai gandaan; 4. rentetan, rentetan;

Bagaimana untuk menukar pembolehubah kepada jenis tatasusunan dalam php Bagaimana untuk menukar pembolehubah kepada jenis tatasusunan dalam php Feb 09, 2022 pm 05:52 PM

Kaedah menukar kepada jenis tatasusunan: 1. Tambahkan jenis sasaran "(tatasusunan)" yang disertakan dalam kurungan sebelum pembolehubah berangka yang hendak ditukar, dan sintaksnya ialah "(tatasusunan) pembolehubah penukaran" 2. Gunakan fungsi settype(), sintaksnya ialah " settype(conversion variable,"array")".

Terdapat beberapa jenis tatasusunan php Terdapat beberapa jenis tatasusunan php Jun 12, 2023 am 10:12 AM

Terdapat empat jenis tatasusunan PHP, iaitu: 1. Tatasusunan indeks berangka, setiap elemennya mempunyai subskrip integer, bermula dari 0 dan meningkat 2. Tatasusunan bersekutu, setiap elemen mempunyai Kunci rentetan 3. Berbilang dimensi; tatasusunan, anda boleh mencipta tatasusunan berbilang dimensi dari mana-mana peringkat. 4. Tatasusunan dengan kekunci pembolehubah, anda boleh menambah dan memadamkan tatasusunan pasangan nilai kunci secara dinamik.

Analisis perbezaan antara jenis struktur dan jenis tatasusunan fungsi Golang Analisis perbezaan antara jenis struktur dan jenis tatasusunan fungsi Golang May 16, 2023 am 09:00 AM

Di Golang, jenis data fungsi boleh dibahagikan kepada jenis struktur dan jenis tatasusunan Terdapat perbezaan penting antara kedua-dua jenis ini. Artikel ini akan menganalisis perbezaan mereka. 1. Jenis struktur Struktur ialah jenis data yang terdiri daripada beberapa medan. Medan ini boleh terdiri daripada jenis yang berbeza, jenis asas atau jenis tersuai lain. Dalam Golang, gunakan kata kunci "struct" untuk mentakrifkan jenis struktur, dan kemudian gunakan nama jenis untuk mencipta contoh struktur. Struktur boleh mengakses medannya melalui tatatanda titik, atau

Apakah jenis tatasusunan yang terdapat dalam PHP7.0? Apakah jenis tatasusunan yang terdapat dalam PHP7.0? May 27, 2023 pm 05:01 PM

Apakah jenis tatasusunan yang terdapat dalam PHP7.0? Array ialah jenis data yang sangat penting dalam PHP7.0 Ia boleh menyimpan berbilang nilai dan nilai ini boleh diakses melalui indeks atau kunci. Dalam PHP 7.0, jenis tatasusunan adalah sangat fleksibel dan oleh itu boleh digunakan untuk menyelesaikan banyak masalah pengaturcaraan yang berbeza. Dalam artikel ini, kami akan memperkenalkan jenis tatasusunan dalam PHP7.0 dan cara menggunakannya. 1. Tatasusunan biasa Tatasusunan biasa ialah salah satu jenis yang paling biasa dalam PHP7.0. Ia terdiri daripada senarai tersusun pasangan nilai kunci, di mana

Kemahiran traversal dan operasi jenis data tatasusunan dalam PHP Kemahiran traversal dan operasi jenis data tatasusunan dalam PHP Jul 15, 2023 pm 07:37 PM

Kemahiran traversal dan operasi jenis data tatasusunan dalam PHP Dalam PHP, tatasusunan ialah jenis data yang sangat biasa digunakan yang membolehkan kami menyimpan sekumpulan elemen data yang berkaitan dalam pembolehubah. Menggunakan tatasusunan, kami boleh mengakses dan memanipulasi data dalam tatasusunan melalui indeks atau kunci yang berkaitan. Artikel ini akan memperkenalkan teknik traversal dan manipulasi tatasusunan dalam PHP dan menyediakan beberapa kod sampel untuk rujukan. Melintasi Tatasusunan Terindeks Tatasusunan terindeks ialah jenis tatasusunan yang paling biasa yang menggunakan nombor yang ditetapkan secara automatik sebagai indeks. Kita boleh gunakan untuk gelung atau hadapan

Program C untuk mencari jenis tatasusunan yang dimasukkan oleh pengguna Program C untuk mencari jenis tatasusunan yang dimasukkan oleh pengguna Aug 30, 2023 am 10:29 AM

Soalan: Tulis atur cara C untuk mencari jenis tatasusunan yang perlu disemak untuk menentukan sama ada elemen dalam tatasusunan tertentu adalah genap, ganjil atau kedua-duanya. Penyelesaian Pengguna perlu memasukkan tatasusunan integer dan kemudian memaparkan jenis tatasusunan. Contoh 1 − Input: 531, output: tatasusunan ganjil. Contoh 2 − Input: 2468, output: tatasusunan genap. Contoh 3 − Input: 12345, output: tatasusunan bercampur. Algoritma merujuk kepada algoritma yang diberikan di bawah untuk mencari jenis tatasusunan yang dimasukkan oleh pengguna. Langkah 1 − Baca saiz tatasusunan semasa masa jalan. Langkah 2−Masukkan elemen tatasusunan. Langkah 3 − sebagai

See all articles