2.操練存儲(chǔ)過程

概念了解

???????存儲(chǔ)過程Procedure是一組為了完成特定功能的SQL語句集合缭保,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過指定存儲(chǔ)過程的名稱并給出參數(shù)來執(zhí)行蝙茶。

???????存儲(chǔ)過程中可以包含邏輯控制語句和數(shù)據(jù)操縱語句艺骂,它可以接受參數(shù)、輸出參數(shù)隆夯、返回單個(gè)或多個(gè)結(jié)果集以及返回值彻亲。

???????由于存儲(chǔ)過程在創(chuàng)建時(shí)即在數(shù)據(jù)庫服務(wù)器上進(jìn)行了編譯并存儲(chǔ)在數(shù)據(jù)庫中,所以存儲(chǔ)過程運(yùn)行要比單個(gè)的SQL語句塊要快吮廉。同時(shí)由于在調(diào)用時(shí)只需用提供存儲(chǔ)過程名和必要的參數(shù)信息,所以在一定程度上也可以減少網(wǎng)絡(luò)流量畸肆、簡(jiǎn)單網(wǎng)絡(luò)負(fù)擔(dān)宦芦。

紙上談兵

 存儲(chǔ)過程

  CREATE OR REPLACE PROCEDURE 存儲(chǔ)過程名
  IS
  BEGIN
  NULL;
  END;

 

行1:    CREATE OR REPLACE PROCEDURE 是一個(gè)SQL語句通知Oracle數(shù)據(jù)庫去創(chuàng)建一個(gè)叫做skeleton存儲(chǔ)過程, 如果存在就覆蓋它;

行2:    IS關(guān)鍵詞表明后面將跟隨一個(gè)PL/SQL體。

行3:    BEGIN關(guān)鍵詞表明PL/SQL體的開始轴脐。

行4:    NULL PL/SQL語句表明什么事都不做调卑,這句不能刪去,因?yàn)镻L/SQL體中至少需要有一句;

行5:    END關(guān)鍵詞表明PL/SQL體的結(jié)束


存儲(chǔ)過程創(chuàng)建語法:

create or replace procedure 存儲(chǔ)過程名(param1 in type大咱,param2 out type) 

as 

變量1 類型(值范圍); --vs_msg   VARCHAR2(4000); 

變量2 類型(值范圍);

Begin

Select count(*) into 變量1 from 表A where列名=param1恬涧;

    If (判斷條件) then

       Select 列名 into 變量2 from 表A where列名=param1;

       Dbms_output碴巾。Put_line(‘打印信息’);

    Elsif (判斷條件) then

       Dbms_output溯捆。Put_line(‘打印信息’);

    Else
    
       Raise 異常名(NO_DATA_FOUND);

    End if;

Exception

    When others then

       Rollback;

End;


注意事項(xiàng):

1, 存儲(chǔ)過程參數(shù)不帶取值范圍厦瓢,in表示傳入提揍,out表示輸出

類型可以使用任意Oracle中的合法類型。

2煮仇,  變量帶取值范圍劳跃,后面接分號(hào)

3,  在判斷語句前最好先用count(*)函數(shù)判斷是否存在該條操作記錄

4浙垫,  用select 刨仑。。夹姥。into杉武。。佃声。給變量賦值

5艺智,  在代碼中拋異常用 raise+異常名

全軍出擊

實(shí)參形參:

create or replace procedure myDemo04(name in varchar,age in int)
as
begin
  dbms_output.put_line('name='||name||', age='||age);
end;

declare
 name varchar(10);
 age int;
begin
  name:='xiaoming';
  age:=18;
  myDemo04(name=>name,age=>18);--此時(shí)不能myDemo04(name=>name,18),不能完成調(diào)用圾亏。

end;

注;在調(diào)用存儲(chǔ)過程時(shí)十拣,=>前面的變量為存儲(chǔ)過程的形參且必須于存儲(chǔ)過程中定義的一致封拧,而=>后的參數(shù)為實(shí)際參數(shù)。當(dāng)然也不可以不定義變量保存實(shí)參

in夭问,out參數(shù)問題



create or replace procedure myDemo05(name out varchar,age in int)
as
begin
       dbms_output.put_line('age='||age);
  select 'seaco' into name from dual;
end;

declare
 name varchar(10);
 age int;
begin
  myDemo05(name=>name,age=>10);
  dbms_output.put_line('name='||name);
end;

 注:in代表輸入泽西,out用于輸出

crud

create or replace procedure mydemo07(ids in int, username in varchar,userpass in varchar, userage in int)
as
begin
-- insert into students(id,username,userpass,userage)
-- values(ids,username,userpass,userage); --增
-- delete from students where id=ids; --刪
-- update students set userage=100 where id=ids;--改
commit;
end;
begin
  mydemo07(10,'a','b','17');
end;
---------------------------
create or replace procedure mydemo08(ids in int, age out int)
as
begin
  select userage into age from students where id=ids; --查
  commit;
end;
declare
 ids int;
 age int;
begin
  ids:=1;
  myDemo08(ids=>ids,age=>age);
  dbms_output.put_line('age='||age);
end;

for循環(huán)

create or replace procedure mydemo09
as
begin

 for stu in (select * from students) loop
     if (stu.id<5) then
        dbms_output.put_line(stu.id);
      end if;
  end loop;
commit;
end;

begin
  mydemo09();
end;

while循環(huán)

create or replace procedure test_while_loop as
  n_count number := 0;
begin
  while n_count < 10 loop
    dbms_output.put_line(n_count);
    n_count := n_count + 1;
  end loop;
end;
 
begin
  test_while_loop();
end;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缰趋,隨后出現(xiàn)的幾起案子捧杉,更是在濱河造成了極大的恐慌,老刑警劉巖秘血,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件味抖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灰粮,警方通過查閱死者的電腦和手機(jī)仔涩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粘舟,“玉大人熔脂,你說我怎么就攤上這事「屉龋” “怎么了霞揉?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晰骑。 經(jīng)常有香客問我适秩,道長(zhǎng),這世上最難降的妖魔是什么些侍? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任隶症,我火速辦了婚禮,結(jié)果婚禮上岗宣,老公的妹妹穿的比我還像新娘蚂会。我一直安慰自己,他們只是感情好耗式,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布胁住。 她就那樣靜靜地躺著,像睡著了一般刊咳。 火紅的嫁衣襯著肌膚如雪彪见。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天娱挨,我揣著相機(jī)與錄音余指,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酵镜,可吹牛的內(nèi)容都是我干的碉碉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淮韭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼垢粮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靠粪,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤蜡吧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后占键,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昔善,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年畔乙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耀鸦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡口锭,死狀恐怖而芥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤议慰,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站胯努,受9級(jí)特大地震影響东臀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜参咙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一龄广、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕴侧,春花似錦择同、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至择葡,卻和暖如春紧武,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敏储。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工阻星, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人已添。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓妥箕,卻偏偏與公主長(zhǎng)得像滥酥,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矾踱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容