%rowtype是什麼?

warehouse發表於2007-11-13
每次講課,%rowtype是什麼,很多非計算機專業或者說即使是計算機專業但是基礎不是很好的一些學員總是理解不了,原因是他們不熟悉c中的結構體或者是parcle(是這麼寫的嗎?忘了)中的record型別。

我直接給出一個%rowtype的例子很多學員說理解起來有困難!

declare
cursor c1 is select * from t_emp ;
v_emp t_emp%rowtype ;
begin
open c1 ;
fetch c1 into v_emp ;
while not c1%notfound loop
dbms_output.put_line(
v_emp.id||' '||v_emp.name||' '||
v_emp.sex||' '||v_emp.age||' '||v_emp.salary||' '||
v_emp.birthday||' '||v_emp.depart_code) ;
fetch c1 into v_emp ;
end loop ;
close c1 ;
end;

--===================================

於是我嘗試透過下面的程式碼解釋一下,效果很好!但是oracle內部是不是透過這樣實現的我不得而知!

declare
cursor c1 is select * from t_emp ;
type v_emp_type is record(
id t_emp.id%type,
name t_emp.name%type,
sex t_emp.sex%type,
age t_emp.age%type,
salary t_emp.salary%type,
birthday t_emp.birthday%type,
depart_code t_emp.depart_code%type
) ;
v_emp v_emp_type ;

begin
open c1 ;
fetch c1 into v_emp ;
while not c1%notfound loop
dbms_output.put_line(
v_emp.id||' '||v_emp.name||' '||
v_emp.sex||' '||v_emp.age||' '||v_emp.salary||' '||
v_emp.birthday||' '||v_emp.depart_code) ;
fetch c1 into v_emp ;
end loop ;
close c1 ;
end;

--=======================================

試想如果沒有%rowtype,那麼定義太多的變數將成為一件很繁瑣的事情!

declare
cursor c1 is select * from t_emp ;
v_id int;
v_name varchar2(20) ;
v_sex varchar2(10) ;
v_age int ;
v_salary number ;
v_birthday date ;
v_depart_code varchar2(10) ;
begin
open c1 ;
fetch c1 into v_id , v_name , v_sex , v_age,
v_salary , v_birthday , v_depart_code ;
while not c1%notfound loop
dbms_output.put_line(c1%rowcount) ;
dbms_output.put_line(v_id||' '||v_name||' '||
v_sex||' '||v_age||' '||v_salary||' '||
v_birthday||' '||v_depart_code) ;
fetch c1 into v_id , v_name , v_sex , v_age,
v_salary , v_birthday , v_depart_code ;
end loop ;
close c1 ;
end;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-61752/,如需轉載,請註明出處,否則將追究法律責任。

相關文章