日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 存储过程入门

發布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 存储过程入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一,基本入門介紹看創建存儲過程的基本定義。注意,帶有[]的都是可選的,可有可無的。只是語法能通過,當然根據自己需要 處理。CREATE [OR REPLACE] PROCEDURE procedure_name[ (parameter [,parameter]) ]IS[declaration_section]BEGINexecutable_section[EXCEPTIONexception_section]END [procedure_name];create table students ( ID int,userName varchar(100),userPass varchar(100),userAge int )insert into students values(1,'jack','jjjaa',23); insert into students values(2,'rose','jjjaa',21); insert into students values(3,'lucy','jjjaa',22); insert into students values(4,'Tony','jjjaa',24); commit;這里我們新建一個存儲過程,對于某個用戶添加年齡,哈哈,當然這個是沒什么意義的,學習,從簡單入手。 在實際開發中,語法,原理是一樣的。create or replace procedure SP_Update_Age (uName in varchar,--note,here don't have length ,sql have lenth ,not in oracle.Age in int ) as beginupdate students set UserAge = UserAge + Age where userName = uName;commit; end SP_Update_Age; 在執行存儲過程之前,我們先查看原來的數據。select * from students/*********************ID USERNAME USERPASS USERAGE1 jack jjjaa 23 2 rose jjjaa 21 3 lucy jjjaa 22 4 Tony jjjaa 24**********************/然后我們在SQL Editor中執行如下存儲過程。注意看是怎么調用的:exec SP_UPDATE_AGE('jack',1);select * from students;/********************ID USERNAME USERPASS USERAGE1 jack jjjaa 24 --noted,have changed 2 rose jjjaa 21 3 lucy jjjaa 22 4 Tony jjjaa 24*********************/二,基本語法介紹1,變量賦值變量名 := 值;2,判斷語句。 if 比較式 then begin end; end ifcreate or replace procedure Test(x in out number) is beginif x<0 thenbeginx:= 0 - x;end;elsif x > 0 then --noted here elsif beginx:= x ;end;elsex:= 0;end if; end Test;set serveroutput on; --沒這句話,看不到dmbs_output信息。 declarenum number; beginnum:= -1;test(num);dbms_output.put_line( 'num = ' || num ); end; /****************************** num = 1 PL/SQL procedure successfully completed. *******************************/3,For循環, For in ..loop;set serveroutput on; DECLAREx NUMBER := 100; BEGINFOR i IN 1..10 LOOP --noted here IF MOD(i,2) = 0 THEN -- i is evendbms_output.put_line( 'i: '||i||' is even ' );ELSEdbms_output.put_line('i: '|| i||' is odd' );END IF;x := x + 100;dbms_output.put_line('x value: '|| x);END LOOP;COMMIT; END;/************************* i: 1 is odd x value: 200 i: 2 is even x value: 300 i: 3 is odd x value: 400 i: 4 is even x value: 500 i: 5 is odd x value: 600 i: 6 is even x value: 700 i: 7 is odd x value: 800 i: 8 is even x value: 900 i: 9 is odd x value: 1000 i: 10 is even x value: 1100 PL/SQL procedure successfully completed.*************************/4,While 循環。create or replace Procedure Test2(i in out number) as beginwhile i < 10 loopbegini:= i+1;end;end loop; end Test2;set serveroutput on; declarenum number; beginnum:= 1;test2(num);dbms_output.put_line( 'num = ' || num ); end;/*********************num = 10 PL/SQL procedure successfully completed.***********************/

Oracle存儲過程

1、定義所謂存儲過程(Stored Procedure),就是一組用于完成特定數據庫功能的SQL語句集,該SQL語句集 經過編譯后存儲在數據庫系統中。在使用時候,用戶通過指定已經定義的存儲過程名字并給出相應的 存儲過程參數來調用并執行它,從而完成一個或一系列的數據庫操作。2、存儲過程的創建Oracle存儲過程包含三部分:過程聲明,執行過程部分,存儲過程異常。(1)無參存儲過程語法 create or replace procedure NoParPro as //聲明 ; begin // 執行 ; exception//存儲過程異常 ; end;(2)帶參存儲過程實例 create or replace procedure queryempname(sfindno emp.empno%type) as sName emp.ename%type; sjob emp.job%type; begin .... exception .... end;(3)帶參數存儲過程含賦值方式create or replace procedure runbyparmeters (isal in emp.sal%type, sname out varchar, sjob in out varchar) as icount number; begin select count(*) into icount from emp where sal>isal and job=sjob; if icount=1 then .... else .... end if; exception when too_many_rows then DBMS_OUTPUT.PUT_LINE('返回值多于1行'); when others then DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過程中出錯!'); end; 其中參數IN表示輸入參數,是參數的默認模式。 OUT表示返回值參數,類型可以使用任意Oracle中的合法類型。 OUT模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳遞回調用他的過程 IN OUT表示該參數可以向該過程中傳遞值,也可以將某個值傳出去。(4)存儲過程中游標定義使用 as //定義(游標一個可以遍歷的結果集) CURSOR cur_1 IS SELECT area_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn, SUM(usd_amt)/10000 usd_amt_sn FROM BGD_AREA_CM_M_BASE_T WHERE ym >= vs_ym_sn_beg AND ym <= vs_ym_sn_end GROUP BY area_code,CMCODE; begin //執行(常用For語句遍歷游標) FOR rec IN cur_1 LOOP UPDATE xxxxxxxxxxx_T SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn WHERE area_code = rec.area_code AND CMCODE = rec.CMCODE AND ym = is_ym; END LOOP; (5)游標的定義 --顯示cursor的處理 declare ---聲明cursor,創建和命名一個sql工作區 cursor cursor_name is select real_name from account_hcz;v_realname varchar2(20); begin open cursor_name;---打開cursor,執行sql語句產生的結果集fetch cursor_name into v_realname;--提取cursor,提取結果集中的記錄dbms_output.put_line(v_realname);close cursor_name;--關閉cursor end;3、在Oracle中對存儲過程的調用 (1)過程調用方式一 declare realsal emp.sal%type; realname varchar(40); realjob varchar(40); begin //過程調用開始 realsal:=1100; realname:=''; realjob:='CLERK'; runbyparmeters(realsal,realname,realjob);--必須按順序 DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB); END; //過程調用結束 (2)過程調用方式二 declare realsal emp.sal%type; realname varchar(40); realjob varchar(40); begin //過程調用開始 realsal:=1100; realname:=''; realjob:='CLERK'; --指定值對應變量順序可變 runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob); DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB); END; //過程調用結束 (3)過程調用方式三(SQL命令行方式下) 1、SQL>exec proc_emp('參數1','參數2');//無返回值過程調用 2、SQL>var vsal number SQL> exec proc_emp ('參數1',:vsal);// 有返回值過程調用 或者:call proc_emp ('參數1',:vsal);// 有返回值過程調用

?

總結

以上是生活随笔為你收集整理的Oracle 存储过程入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。