儲存過程和函式

2022-07-23 13:36:26 字數 3475 閱讀 3501

問:儲存過程可以做什麼?

答:儲存過程可以封裝比較複雜的sql語句。或者是,我們可以通過儲存過程完成一系列複雜任務的sql寫成獨立的程式模組,

儲存在伺服器上,供我們多次呼叫。

create or replace procedure findall(o_return_int out number, o_return_string in out varchar2) is

--定義乙個游標

cursor emp_cursor is select * from emp;

--使用pl/sql表,類似集合操作

type emp_table_type is table of emp%rowtype;

--定義陣列變數

emp_table emp_table_type;

begin

--開啟游標

if not emp_cursor%isopen then

open emp_cursor;

end if;

fetch emp_cursor bulk collect into emp_table;

--關閉游標

if emp_cursor%isopen then

close emp_cursor;

end if;

--使用for遍歷集合

for v_i in 1..emp_table.count loop

dbms_output.put_line(emp_table(v_i).ename);

end loop;

o_return_int :=1;

o_return_string := 'success';

exception when others then

o_return_int :=0;

o_return_string := 'fail';

end findall;

呼叫儲存過程的方式有兩種:

<1>pl/sql環境中進行呼叫。

declare

o_return_int number;

o_return_string varchar2(30);

begin

findall(o_return_int,o_return_string);

dbms_output.put_line(o_return_string || o_return_int);

end;

<2>在sqlplus環境中呼叫。

variable o_return_int number;

variable o_return_string varchar2(40);

exec findall(:o_return_int,:o_return_string);

注意:引數前的分號!!!

函式定義:

函式用於返回特定的資料,當建立函式時,在函式頭部必須包含return子句,在函式體內必須包含語句返回的資料。

--通過員工編號查詢員工名稱

create or replace function findempnamebyempno(v_empno in number) return varchar2 is

v_ename emp.ename%type;

begin

select ename into v_ename from emp e where e.empno = v_empno;

return(v_ename);

exception when others then

v_ename := null;

return(v_ename);

end findempnamebyempno;

--使用pl/sql呼叫函式

declare

v_result varchar2(30);

begin

v_result := findempnamebyempno(33);

if v_result is null then

dbms_output.put_line('

v_result is null

');

else

dbms_output.put_line('

v_result is not null

');

end if;

end;

--使用select語句呼叫

select  findempnamebyempno(7369) from dual;

--使用sqlplus呼叫

variable v_ename varchar2(50);

call findempnamebyempno(7369) into :v_ename;

注意:引數前的分號!!!

儲存過程和儲存函式

1 mysql 在操作子程式時,由於需要使用分號 所以要使用delimiter先重新定義分界符為 以下 包含的內容表示注釋 delimiter 使用delimiter 把定界符由 設定為 注意 delimiter 和 之間的空格。1 建立子程式 儲存過程和儲存函式的統稱 create procedu...

儲存過程和儲存函式

儲存過程 stored procedure 是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫。中使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它 優點 1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而 一般sql 語句每執行一次就編譯一次,...

儲存過程和函式

子程式 命名的pl sql塊 的各個部分 申明部分,可執行部分,異常部分 可選 子程式的分類 過程 執行某些操作 函式 執行操作並返回結果 過程引數的三種模式 in,out,in out 建立過程的語法 create or replace procedure param list is as beg...