PL/SQL 程序結構:函數
declare 佈局
聲明部分(聲明變量、類型、遊標以及佈局的存儲過程及函數)spa
begin對象
執行部分(過程及SQL語句,程序的主要部分,是必須的)it
end;eg(基表爲course):table
declareclass
v_cno varchar(20) :='001';變量
beginselect
select * from course where cno=v_cno;數據類型
delete * from course where cno=v_cno;
end;
------查詢course表中cno=‘001’的數據
------刪除course表中cno=‘001’的數據
returning的使用
在須要返回DML語句執行後的信息時使用,講個例子加以說明
本例基表爲student(sno, sname, classno)
declare
s_no varchar2(20);
s_name varchar2(40);
begin
insert into student values('20110001','張三','051') returning sno,sname into s_no, s_name;
dbms_output.put_line(s_no);
dbms_output.put_line(s_name);
end
------將插入的信息之中的sno、sname對應的賦值給s_no,s_name
type、%type的使用
type 用於定義類,具體用例子說明
基表爲course(cno,cname,credit)
declare
type c_rec is record(
c_cno char(10):=&no,
c_cname char(40)
);
rec_course c_rec; -------rec_course 的類型爲c_rec類
begin
select cno,cname into rec_course from course where cno=rec_course.c_cno;
dbms_output.put_line(rec_course.c_cno||' '||rec_course.c_cname);
end;
%type可使定義的變量引用相關字段的數據類型、格式等,例如:
declare
type c_rec is record(
c_cno course.cno%type:=&no, --c_cno引用了course表中的cno的數據類型和寬度
c_cname course.cname%type); --c_cname引用了course表中cname的數據類型和寬度
rec_course c_rec;
begin
select cno,cname into rec_course from course where cno=rec_course.c_cno ;
bdms_output.put_line(rec_course.c_cno||' '||rec_course.c_cname);
end;
上例中的‘&no’表示用戶自行輸入的數據做爲c_cno的默認值
%rowtype返回一個記錄類型,例如:
declare
c_cno course.cno%type:=&no;
rec_course course%rowtype;
begin
select * into rec_course from course where cno=c_cno;
----rec_course中引用了course表中知足條件的一行數據
dbms_output.put_line(‘課程名:’||rec_course.cname||' 課程號: '||rec_course.cno);
end;
表類型
declare
type table_type_name is table of table_name%rowtype index by binary_integer;
.......
begin
.......
end;
其中:table_type_name 是表類型的名稱,table_name 是參照表的名稱,is table 表示該類型爲表類型
eg:
declare
type sc_table is table of sc%rowtype index by binary_integer;
w_sc sc_table;
begin
select sno,cno,grade into w_sc(1).sno,w_sc(1).cno,w_sc(1).grade from sc where sno='20110002' ;
dbms_output.put_line(w_sc(1).sno||' '||w_sc(1).cno||' '||w_sc(1).grade);
end;
注意:表類型的賦值不能直接賦值給表對象,即 select * into w_sc from sc where sno='20110001'; 這樣複製是錯誤的,應該使用下標,如以上的示例