您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Oracle中怎么創(chuàng)建存儲過程,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
一、JAVA調(diào)用Oracle存儲過程
JAVA跟Oracle之間最常用的是JAVA調(diào)用Oracle的存儲過程,以下簡要說明下JAVA如何對Oracle存儲過程進行調(diào)用。
Ⅰ、不帶輸出參數(shù)情況
過程名稱為pro1,參數(shù)個數(shù)1個,數(shù)據(jù)類型為整形數(shù)據(jù)
import java.sql. * ; public class ProcedureNoArgs { public static void main(String args[]) throws Exception { // 加載Oracle驅(qū)動 DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); // 獲得Oracle數(shù)據(jù)庫連接 Connection conn = DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd " ); // 創(chuàng)建存儲過程的對象 CallableStatement c = conn.divpareCall( " {call pro1(?)} " ); // 給Oracle存儲過程的參數(shù)設(shè)置值 ,將第一個參數(shù)的值設(shè)置成188 c.setInt( 1 , 188 ); // 執(zhí)行Oracle存儲過程 c.execute(); conn.close(); } }
Ⅱ、帶輸出參數(shù)的情況
過程名稱為pro2,參數(shù)個數(shù)2個,數(shù)據(jù)類型為整形數(shù)據(jù),返回值為整形類型
import java.sql.*; public class ProcedureWithArgs { public static void main(String args[]) throws Exception { //加載Oracle驅(qū)動 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //獲得Oracle數(shù)據(jù)庫連接 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd "); //創(chuàng)建Oracle存儲過程的對象,調(diào)用存儲過程 CallableStatement c=conn.divpareCall("{call pro2(?,?)}"); //給Oracle存儲過程的參數(shù)設(shè)置值 ,將第一個參數(shù)的值設(shè)置成188 c.setInt(1,188); //注冊存儲過程的第二個參數(shù) c.registerOutParameter(2,java.sql.Types.INTEGER); //執(zhí)行Oracle存儲過程 c.execute(); //得到存儲過程的輸出參數(shù)值并打印出來 System.out.println (c.getInt(2)); conn.close(); } }
Oracle存儲過程包含三部分:過程聲明,執(zhí)行過程部分,存儲過程異常。
Oracle存儲過程可以有無參數(shù)存儲過程和帶參數(shù)存儲過程。
一、無參程序過程語法
create or replace procedure NoParPro
as …… ;
begin
…… ;
exception //存儲過程異常
…… ;
end;
二、帶參存儲過程實例
create or replace procedure queryempname(sfindno emp.empno%type) as
sName emp.ename%type;
sjob emp.job%type;
begin
....
exception
....
end;
三、 帶參數(shù)存儲過程含賦值方式
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;
四、在Oracle中對存儲過程的調(diào)用
過程調(diào)用方式一
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //存儲過程調(diào)用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(realsal,realname,realjob); --必須按順序
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調(diào)用結(jié)束
過程調(diào)用方式二
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //過程調(diào)用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob); --指定值對應(yīng)變量順序可變
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調(diào)用結(jié)束
上述就是小編為大家分享的Oracle中怎么創(chuàng)建存儲過程了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。