亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle 存儲過程總結(一、基本應用)

2024-08-29 13:56:30
字體:
來源:轉載
供稿:網友

1、創建存儲過程
create or replace procedure test(var_name_1 in type,var_name_2 out type) as
--聲明變量(變量名 變量類型)
begin
--存儲過程的執行體
end test;
打印出輸入的時間信息
E.g:
create or replace procedure test(workDate in Date) is
begin
dbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd'));
end test;
2、變量賦值
變量名 := 值;
E.g:
create or replace procedure test(workDate in Date) is
x number(4,2);
begin
x := 1;
end test;
3、判斷語句:
if 比較式 then begin end; end if;
E.g
create or replace procedure test(x in number) is
begin
if x >0 then
begin
x := 0 - x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if;
end test;
4、For 循環
For ... in ... LOOP
--執行語句
end LOOP;
(1)循環遍歷游標
create or replace procedure test() as
Cursor cursor is select name from student; name varchar(20);
begin
for name in cursor LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2)循環遍歷數組
create or replace procedure test(varArray in myPackage.TestArray) as
--(輸入參數varArray 是自定義的數組類型,定義方式見標題6)
i number;
begin
i := 1; --存儲過程數組是起始位置是從1開始的,與java、C、C++等語言不同。因為在Oracle中本是沒有數組的概念的,數組其實就是一張
--表(Table),每個數組元素就是表中的一個記錄,所以遍歷數組時就相當于從表中的第一條記錄開始遍歷
for i in 1..varArray.count LOOP
dbms_output.putline('The No.'|| i || 'record in varArray is:'||varArray(i));
end LOOP;
end test;
5、While 循環
while 條件語句 LOOP
begin
end;
end LOOP;
E.g
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i:= i + 1;
end;
end LOOP;
end test;
6、數組
首先明確一個概念:Oracle中本是沒有數組的概念的,數組其實就是一張表(Table),每個數組元素就是表中的一個記錄。
使用數組時,用戶可以使用Oracle已經定義好的數組類型,或可根據自己的需要定義數組類型。
(1)使用Oracle自帶的數組類型
x array; --使用時需要需要進行初始化
e.g:
create or replace procedure test(y out array) is
x array;
begin
x := new array();
y := x;
end test;
(2)自定義的數組類型 (自定義數據類型時,建議通過創建Package的方式實現,以便于管理)
E.g (自定義使用參見標題4.2) create or replace package myPackage is
-- Public type declarations type info is record( name varchar(20), y number);
type TestArray is table of info index by binary_integer; --此處聲明了一個TestArray的類型數據,其實其為一張存儲Info數據類型的Table而已,及TestArray 就是一張表,有兩個字段,一個是
name,一個是y。需要注意的是此處使用了Index by binary_integer 編制該Table的索引項,也可以不寫,直接寫成:type TestArray is
table of info,如果不寫的話使用數組時就需要進行初始化:varArray myPackage.TestArray; varArray := new myPackage.TestArray();
end TestArray;
7.游標的使用 Oracle中Cursor是非常有用的,用于遍歷臨時表中的查詢結果。其相關方法和屬性也很多,現僅就常用的用法做一二介紹:
(1)Cursor型游標(不能用于參數傳遞)
create or replace procedure test() is
cusor_1 Cursor is select std_name from student where ...; --Cursor的使用方式1 cursor_2 Cursor;
begin
select class_name into cursor_2 from class where ...; --Cursor的使用方式2
可使用For x in cursor LOOP .... end LOOP; 來實現對Cursor的遍歷
end test;
(2)SYS_REFCURSOR型游標,該游標是Oracle以預先定義的游標,可作出參數進行傳遞
create or replace procedure test(rsCursor out SYS_REFCURSOR) is
cursor SYS_REFCURSOR; name varhcar(20);
begin
OPEN cursor FOR select name from student where ... --SYS_REFCURSOR只能通過OPEN方法來打開和賦值
LOOP
fetch cursor into name --SYS_REFCURSOR只能通過fetch into來打開和遍歷 exit when cursor%NOTFOUND; --SYS_REFCURSOR中可使用三個狀態屬性: ---%NOTFOUND(未找到記錄信息) %FOUND(找到記錄信息) ---%ROWCOUNT(然后當前游標所指向的行位置)
dbms_output.putline(name);
end LOOP;
rsCursor := cursor;
end test;
下面寫一個簡單的例子來對以上所說的存儲過程的用法做一個應用:
現假設存在兩張表,一張是學生成績表(studnet),字段為:stdId,math,article,language,music,sport,total,average,step 一張是學生課外成績表(out_school),字段為:stdId,parctice,comment
通過存儲過程自動計算出每位學生的總成績和平均成績,同時,如果學生在課外課程中獲得的評價為A,就在總成績上加20分。
create or replace procedure autocomputer(step in number) is
rsCursor SYS_REFCURSOR;
commentArray myPackage.myArray;
math number;
article number;
language number;
music number;
sport number;
total number;
average number;
stdId varchar(30);
record myPackage.stdInfo;
i number;
begin
i := 1;
get_comment(commentArray); --調用名為get_comment()的存儲過程獲取學生課外評分信息
OPEN rsCursor for select stdId,math,article,language,music,sport from student t where t.step = step;
LOOP
fetch rsCursor into stdId,math,article,language,music,sport; exit when rsCursor%NOTFOUND;
total := math + article + language + music + sport;
for i in 1..commentArray.count LOOP
record := commentArray(i);
if stdId = record.stdId then
begin
if record.comment = 'A' then
begin
total := total + 20;
go to next; --使用go to跳出for循環
end;
end if;
end;
end if;
end LOOP;
<<continue>> average := total / 5;
update student t set t.total=total and t.average = average where t.stdId = stdId;
end LOOP;
end;
end autocomputer;
--取得學生評論信息的存儲過程
create or replace procedure get_comment(commentArray out myPackage.myArray) is
rs SYS_REFCURSOR;
record myPackage.stdInfo;
stdId varchar(30);
comment varchar(1);
i number;
begin
open rs for select stdId,comment from out_school
i := 1;
LOOP
fetch rs into stdId,comment; exit when rs%NOTFOUND;
record.stdId := stdId;
record.comment := comment;
recommentArray(i) := record;
i:=i + 1;
end LOOP;
end get_comment;
--定義數組類型myArray
create or replace package myPackage is begin
type stdInfo is record(stdId varchar(30),comment varchar(1));
type myArray is table of stdInfo index by binary_integer;
end myPackage;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲高清免费观看高清完整版| 亚洲欧美另类中文字幕| 精品国产乱码久久久久酒店| 久久久久五月天| 久久久久久香蕉网| 国产精品高清免费在线观看| 国产成人精品视频| 91久久国产婷婷一区二区| 欧美一区二区三区……| 按摩亚洲人久久| 91av网站在线播放| 国产日韩一区在线| 欧美理论在线观看| 亚洲国产精品久久精品怡红院| 欧美做受高潮1| 亚洲老头同性xxxxx| 91精品在线国产| 午夜欧美大片免费观看| 精品一区二区电影| 亚洲护士老师的毛茸茸最新章节| 久久久久久一区二区三区| 日韩大片免费观看视频播放| 最近中文字幕mv在线一区二区三区四区| 亚洲精品久久久一区二区三区| 91精品在线看| 亚洲欧美精品一区二区| 亚洲一区二区三区四区视频| 伊人激情综合网| 在线日韩欧美视频| 国产成人综合一区二区三区| 精品香蕉在线观看视频一| 欧美性生活大片免费观看网址| 国产精品日日摸夜夜添夜夜av| 日韩中文字幕网站| 国产亚洲美女精品久久久| 亚洲理论电影网| 欧美精品福利视频| 国产精品18久久久久久首页狼| 97在线视频免费| 一区二区亚洲精品国产| 亚洲国产精久久久久久久| 亚洲高清一二三区| 欧美日韩国产综合新一区| 国产精品视频一区二区三区四| 亚洲天堂免费在线| 国产999精品久久久| 麻豆乱码国产一区二区三区| 日韩av高清不卡| 日韩欧美中文字幕在线观看| 久久精视频免费在线久久完整在线看| 色播久久人人爽人人爽人人片视av| 久久久久免费精品国产| 精品久久久久久久久久久久久久| 国产精品美女午夜av| 国产91在线视频| 色樱桃影院亚洲精品影院| 中文字幕国产亚洲| 国产91色在线播放| 日韩精品在线播放| 国产精品色悠悠| yellow中文字幕久久| 国产精品人人做人人爽| 日韩av在线免费| 亚洲欧美精品suv| 国产视频精品xxxx| 丰满岳妇乱一区二区三区| 欧美日韩综合视频网址| 日韩性xxxx爱| 色哟哟亚洲精品一区二区| 丝袜亚洲另类欧美重口| 亚洲在线一区二区| 91夜夜未满十八勿入爽爽影院| 亚洲日本成人女熟在线观看| 欧美有码在线观看视频| 国产欧美一区二区白浆黑人| 国产日韩中文字幕在线| 国产精品久久久久aaaa九色| 亚洲四色影视在线观看| 精品一区精品二区| 九九热r在线视频精品| 岛国av一区二区在线在线观看| 欧美成人自拍视频| 国产精品精品久久久| 久久久国产一区二区| 国产亚洲精品91在线| 国内精品国产三级国产在线专| 国内免费久久久久久久久久久| 黑人巨大精品欧美一区免费视频| 久久影视电视剧免费网站清宫辞电视| 亚洲午夜久久久影院| 欧美午夜精品久久久久久人妖| 久久九九精品99国产精品| 国产一区二区三区在线视频| 欧洲美女免费图片一区| 欧美乱人伦中文字幕在线| 亚洲老司机av| 国产精品高潮呻吟视频| 色一区av在线| 午夜精品福利视频| 国产精品igao视频| 国内精品久久久久久影视8| 中文字幕av一区| 激情亚洲一区二区三区四区| 国产日韩欧美日韩| 精品夜色国产国偷在线| 91超碰caoporn97人人| 91久久精品日日躁夜夜躁国产| www国产亚洲精品久久网站| 欧美大肥婆大肥bbbbb| 精品偷拍各种wc美女嘘嘘| 91久久精品国产91性色| 97国产精品视频人人做人人爱| 91精品久久久久久久久久入口| 懂色av影视一区二区三区| 亚洲综合视频1区| 午夜精品久久久久久久99黑人| 九色精品免费永久在线| 亚洲免费视频一区二区| 亚洲精品福利资源站| 欧美日韩亚洲激情| 久久香蕉国产线看观看av| 78色国产精品| 韩剧1988免费观看全集| 国产精品综合久久久| 欧美理论在线观看| 国产女人18毛片水18精品| 日本亚洲精品在线观看| 日韩国产在线看| 97国产精品免费视频| 欧美成人免费一级人片100| 欧美日韩中文字幕| 国精产品一区一区三区有限在线| 久久天天躁狠狠躁夜夜躁2014| 日韩av免费观影| 日韩欧美国产成人| 亚洲国产精品99久久| 成人春色激情网| 久久躁日日躁aaaaxxxx| 欧美色道久久88综合亚洲精品| 欧美日韩一区二区在线播放| 最近2019中文字幕在线高清| 国产精品中文字幕在线观看| 欧美激情精品久久久久| 精品国产区一区二区三区在线观看| 97成人超碰免| 久久久在线视频| 亚洲大胆人体视频| 自拍亚洲一区欧美另类| 欧美激情欧美激情| 久久综合五月天| 国产原创欧美精品| 久久人人爽人人爽人人片av高请| 久久这里有精品| 欧美成年人视频网站欧美| 亚洲高清一二三区| 国产精品中文字幕久久久| 91极品女神在线| 色偷偷91综合久久噜噜| 中文字幕9999| 亚洲a级在线播放观看| 亚洲影院色在线观看免费| 日韩美女视频免费在线观看| 国产亚洲欧美日韩精品| 国产精品免费久久久|