Oracle 儲存過程、函式的建立和呼叫
阿新 • • 發佈:2018-12-16
一、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