1. 程式人生 > >Oracle 儲存過程、函式的建立和呼叫

Oracle 儲存過程、函式的建立和呼叫

一、Oracle 建立和呼叫儲存過程

1、基本語法

create or replace procedure update_emp_sal
(Name in out type,
 Name in out type, ...
) is
begin
  
end update_emp_sal;

可能不瞭解 in out 引數,
Oracle 過程中定義了 in / out / in out 三種引數模式。
(1)in 就是傳入但儲存過程裡面處理的引數,傳進去供查詢語句使用。
(2)out 引數就是返回值的引數。返回查詢的結果集。
(3)in out 輸入輸出模式:能接收傳入的實參值;在子程式內部可以修改; 可以輸出(必須用實參變數呼叫)

in 引數就像 c++ 語言裡函式一般的引數那樣,而 out 函式就像 c++ 裡函式的引用型別引數一樣,不知道我比喻是否正確,請高手指點。

如果不知道引數型別,可以參考:

create or replace procedure DEPT_AVG_SAL(p_deptno emp.dept_id%TYPE)
as v_sal emp.salary%TYPE;

begin
      Select avg(salary)  into v_sal
      from emp
    where dept_id = p_deptno;
      dbms_output.put_line(p_deptno || ' : ' || 'average salary is:' || v_sal);

end DEPT_AVG_SAL;

2、寫一個簡單的例子修改 emp 表的 ename 欄位:

create or replace procedure update_emp
(
v_empno  varchar2,
v_ename  varchar2
) is
begin

update emp set ename=v_ename where empno=v_empno;  

end update_emp;

呼叫方法如下:

SQL>exec  update_emp('7935','test');

2、有返回值的儲存過程

就寫一個簡單的返回 empno=7935 的 sal 值

create or replace procedure emp_out_sal
 (
 v_empno in varchar2,
 v_sal out number
 ) is
 vsal number(7,2);
 begin
 
 select sal into vsal from emp where empno=v_empno;
 v_sal:=vsal;
 end;

呼叫有返回值的過程方法(1)

SQL> var vsal number
SQL> exec emp_out_sal('7935',:vsal);

PL/SQL procedure successfully completed
vsal

呼叫有返回值的過程方法(2)

SQL> var vsal number
SQL> call emp_out_sal('7935',:vsal);

Method called
vsal

二、Oracle 建立和呼叫函式(function)

1、基本語法規則如下:

create or replace function (Name in type, Name in type, ...) return number is
  Result number;
begin
  
  return (Result);
end ;

2、寫一個簡單的查詢例子查詢出 empno=7935 的 sal 值

create or replace function ret_emp_sal(v_ename varchar2)
return number
is
v_sal number(7,2);
begin
select nvl(sal,0) into v_sal from emp where lower(ename)=lower(v_ename);
return v_sal;
end;

呼叫此函式:

SQL> var vsla number
SQL> call ret_emp_sal('7935') into :vsal;

Method called
vsal