ORACLE資料庫---儲存過程
在 ORACLE SERVER上建立儲存過程,可以被多個應用程式呼叫,可以向儲存過程傳遞引數,也可以向儲存過程傳回引數
建立儲存過程語法 :
CREATE [OR REPLACE] PROCEDURE Procedure_name
[ (argment [ { IN | OUT | IN OUT } ] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
{ IS | AS }
<型別.變數的說明>
BEGIN
<執行部分>
EXCEPTION
<可選的異常錯誤處理程式>
END;
呼叫儲存過程:
DECLARE
...
BEGIN
...
END;
如上面所示,儲存過程的引數有三種,分別是IN、OUT、IN OUT,接下來我們就以oracle資料庫自帶的SCOTT使用者裡面的emp表和dept表做案例演示。
引數是IN:
--建立一個儲存過程,通過empno查詢ename,dname IN型別--
create or replace procedure pro_findByempIN(v_empno in emp.empno%type)
as
v_ename emp.ename%type;
v_dname dept.dname%type;
begin
select ename,dname into v_ename,v_dname from emp,dept where emp.deptno=dept.deptno and empno=v_empno;
exception
when no_data_found then DBMS_OUTPUT.PUT_LINE('你需要的資料不存在!');
when others then DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
end pro_findByempIN;
--刪除儲存過程--
drop procedure pro_findByempIN;
--呼叫該儲存過程
begin
pro_findByempIN(&n);
end;
引數是OUT:
--建立一個儲存過程,通過empno查詢ename,dname OUT型別--
create or replace procedure findByempOut(p_eno in emp.empno%type,p_ename out varchar2,p_dname out varchar2)
is
begin
select ename,dname into p_ename,p_dname from emp,dept where emp.deptno=dept.deptno and empno=p_eno;
exception
when no_data_found then dbms_output.put_line('你需要的資料不存在');
when others then DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
end findByempOut;
--呼叫findByempOut
declare
--申明返回值的型別
v_ename emp.ename%type;
v_dname dept.dname%type;
begin
findByempOut(&n,v_ename,v_dname);
dbms_output.put_line('員工姓名為:'||v_ename||'部門名稱為:'||v_dname);
end;
引數是IN OUT:
create or replace procedure pro_InOut(p_num in out number)
is
begin
dbms_output.put_line(p_num);
p_num:=123456;
dbms_output.put_line(p_num);
end;
--呼叫pro_InOut
declare
v_num number(10):=111;
begin
pro_InOut(v_num);
dbms_output.put_line(v_num);
end;
以上儲存過程都是經過本人編譯執行成功的,可直接複製貼上檢測,前提是你電腦本地裝有oracle資料庫並將SCOTT使用者載入進來,如果沒有這些可以翻看我之前的關於ORACLE資料庫的部落格!
至此,儲存過程的建立和呼叫介紹完畢!