oracle 表類型變量的使用



轉載於:http://www.itxuexiwang.com/a/shujukujishu/oracle/2016/0216/89.html?1455872314

使用記錄類型變量只能保存一行數據,這限制了SELECT語句的返回行數​,如果SELECT語句返回多行就會錯。Oracle提供了另外一種自定義類型,也就是表類型,它是對記錄類型的擴展,允許處理多行數據,類似於表。
創建表類型的語法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
語法說明如下:
--table_name  創建的表類型名稱。
--IS TABLE  表示創建的是表類型。
--data_type  可以是任何合法的PL/SQL數據類型,例如varchar2。
--INDEX BY BINARY_INTEGER  指定系統創建一個主鍵索引,用於引用表類型變量中的特定行。

使用表類型的例子:

 例一:直接對錶類型變量賦值

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/

例二:使用表類型變量的方法:變量名.方法名[索引號]

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line(new_emp.next(1));
end;
//

例三:與遊標結合使用#p#分頁標題#e#
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) from scott.emp
where ename=v_emp.ename;
end loop;

for i in 1..new_emp.count loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;

end;
/
注意:不能直接對錶變量賦值:select * into new_emp from scott.emp where deptno=30; 這種賦值方法是錯的,賦值需要使用下標,如上面的的例子。



轉載於:http://www.itxuexiwang.com/a/shujukujishu/oracle/2016/0216/89.html?1455872314

使用記錄類型變量只能保存一行數據,這限制了SELECT語句的返回行數​,如果SELECT語句返回多行就會錯。Oracle提供了另外一種自定義類型,也就是表類型,它是對記錄類型的擴展,允許處理多行數據,類似於表。
創建表類型的語法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
語法說明如下:
--table_name  創建的表類型名稱。
--IS TABLE  表示創建的是表類型。
--data_type  可以是任何合法的PL/SQL數據類型,例如varchar2。
--INDEX BY BINARY_INTEGER  指定系統創建一個主鍵索引,用於引用表類型變量中的特定行。

使用表類型的例子:

 例一:直接對錶類型變量賦值

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/

例二:使用表類型變量的方法:變量名.方法名[索引號]

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line(new_emp.next(1));
end;
//

例三:與遊標結合使用#p#分頁標題#e#
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) from scott.emp
where ename=v_emp.ename;
end loop;

for i in 1..new_emp.count loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;

end;
/
注意:不能直接對錶變量賦值:select * into new_emp from scott.emp where deptno=30; 這種賦值方法是錯的,賦值需要使用下標,如上面的的例子。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章