%rowtype mysql_Oracle %type和%rowtype小实例
//%type //如果聲明的變量是直接映射到數據庫的某一列上,那么就可以使用%type關鍵字將變量 //錨定到這個列上。這樣做有什么
Oracle %type和%rowtype小實例
[日期:2011-04-28]
來源:Linux社區
作者:Linux
[字體:]
//%type
//如果聲明的變量是直接映射到數據庫的某一列上,那么就可以使用%type關鍵字將變量
//錨定到這個列上。這樣做有什么好處呢?
//比如:
//declare v_ename scott.emp.ename%type;
//當數據類型發生變化時,此方法顯得非常靈活。
//如果更改了列的長度,那么錨定到該列上的所有變量都會自動更改其長度;
//假設我們將v_ename定義為varchar2(10),那么當emp表中的ename列發生變化時,
//我們得手動將v_enam更改為emp.ename相同的數據長度;
//當我們使用錨定類型后,,變量就會自動進行調整。
//%rowtype
//%rowtype與%type相似;不過它將變量錨定到表的所有列,而不是錨定到某一列;
//更多關于%rowtype與%type,
//請參考:
//下面是一個實例:
create table dept(
deptno varchar2(5),
dname varchar2(20),
loc varchar2(20)
);
create or replace procedure pro_insert(
deptno_in in dept.deptno%type,
dname_in in dept.dname%type,
loc_in in dept.loc%type
)
as
v_dept dept%rowtype;
begin
begin
insert into dept
select deptno_in,dname_in,loc_in
from dual;
commit;
dbms_output.put_line('inserting successed');
exception
when others then
rollback;
end;
begin
select deptno_in,dname_in,loc_in
into v_dept from dual;
dbms_output.put_line(
'The data having been inserted.'||
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end;
end pro_insert;
//
//上面的過程中,使用到了嵌套塊;
//所謂嵌套塊就是塊中包含其他子塊;
//嵌套塊允許出現在代碼塊的異常處理部分和執行部分,
//但是不允許出現在聲明中。
//
SQL> set serveroutput on;
SQL> exec pro_insert('111','財務部','福州');
inserting successed
The data having been inserted.deptno:111,dname:財務部,loc:福州
PL/SQL procedure successfully completed
//
//從這里看出來,%rowtype定義的變量作用有點相似游標,
//但是我們不能將%rowtype定義的變量當做游標來使用,
//否則我們將會得到下面的錯誤:
//ORA-01422: exact fetch returns more than requested number of rows
declare v_dept dept%rowtype;
begin
select deptno,dname,loc
into v_dept
from dept;
dbms_output.put_line(
'The data having been inserted.'||
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end;
//
//下面我們用游標來實現上面的操作,具體看下面的匿名塊:
declare
cursor cv_dept is
select *
from dept;
begin
//變量v_dept不必我們顯示聲明
//for循環會為我們隱式的打開和關閉游標,不必我們現實的打開和關閉游標
for v_dept in cv_dept loop
dbms_output.put_line(
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end loop;
end;
//
deptno:111,dname:財務部,loc:福州
deptno:120,dname:銷售部,loc:大連
deptno:130,dname:科研部,loc:北京
PL/SQL procedure successfully completed
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的%rowtype mysql_Oracle %type和%rowtype小实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: url拼接参数
- 下一篇: LINK的路由器行业巨头之争