儲存過程
(stored procedure)和儲存函式
(stored function)是在資料庫中定義的一些完成特定功能的sql語句集合,其經編譯後儲存在資料庫中。儲存過程和儲存函式中可包含流程控制語句及各種sql語句。它們可以接受引數、輸出引數、返回單個或者多個結果。
在mysql中使用儲存過程,而不是使用儲存在客戶端計算機本地的sql程式的優點如下:
建立儲存過程
在mysql中,建立儲存過程和儲存函式必須具有create routine許可權,並且alter routine和execute許可權被自動授予它的建立者。
# 建立儲存過程
create procedure procedure_name([proc_parameter[,...]]) [characteristic[,...]] routine_body
procedure_name:
[in|out|inout]param_name type
characteristic:
language sql、[not]deterministic、、
sql security、comment'string'
# 呼叫儲存過程
call [dbname.]sp_name([parameter[,...]]);
在建立儲存過程時,系統預設指定contains sql,表示儲存過程中使用了sql語句。但是,如果儲存過程中沒有使用sql語句,最好設定為no sql。而且,最好在儲存過程的comment部分對儲存過程進行簡單的注釋,以便以後在閱讀儲存過程的**時理解**。
mysql> use gradem;
database changed
mysql> delimiter //
mysql> create procedure proc_sc()
-> reads sql data
-> begin
-> select student.sno, sname, sum(degree)/count(degree) from student inner join sc
on student.sno=sc.sno;
-> end //
query ok, 0 rows affected (0.09 sec)
mysql> delimiter;
mysql>
mysql中預設的語句結束符為分號(?。儲存過程中的sql語句需要分號來結束。為了避免衝突,首先用「delimiter //」將mysql的結束符設定為//,最後用「delimiter ;」將結束符恢復成分號。
建立儲存函式
在mysql中,儲存函式的使用方法與mysql內部函式的使用方法一樣。兩者唯一的區別在於,儲存函式是使用者自己定義的,而內部函式是mysql開發者定義的。
# 建立儲存函式
create function func_name([func_parameter[,...]]) retures type [characteristic[,...]] routine_body
# 呼叫儲存函式
select [dbname.]func_name([parameter[,...]]);
procedure可以指定in、out或inout型別的引數,而function的引數型別預設為in。returns子句只能包含在function中,它用來指定函式的返回型別,而且函式體必須包含乙個return value語句。
檢視儲存過程和儲存函式
# 檢視儲存過程和儲存函式的狀態
show status [like 'pattern'];
或show create sp_name;
或select * from information_schema.routines where routine_name='sp_name';
show status語句只能檢視儲存過程或儲存函式是操作哪乙個資料庫,以及儲存過程或儲存函式的名稱、型別、誰定義的、建立和修改時間、字元編碼等資訊。但是,這個語句不能查詢儲存過程或儲存函式的具體定義。如果就需要檢視詳細定義,就需要使用show create語句。
刪除儲存過程和儲存函式
drop [if exists] sp_name;
if exists子句是mysql的擴充套件,如果儲存過程或儲存函式不存在,則它可以防止發生錯誤,產生乙個用show warnings檢視的警告。如果另乙個儲存過程呼叫某個已被刪除的儲存過程,則mysql將在執行呼叫程序時顯示一條錯誤訊息。
(最近更新:2023年09月03日)
建立和使用儲存過程
建立和使用儲存過程 用create procedure命令建立儲存過程和儲存函式。語法 create or replace procedure 過程名 引數列表 asplsql子程式體 第乙個儲存過程 列印hello world 呼叫儲存過程 1.exec sayhelloworld 2.begin...
資料庫 實驗六 游標 儲存過程的建立和使用
1 游標操作 在選修資料庫中,以student sno,sname,s sage,sdept course cno,cname,cpno,credit sc sno,cno,grade 表為基礎完成下列游標操作。1 在student表中定義乙個包含sno,sname,s sage,sdept的滾動游...
Oracle資料庫儲存過程和建立過程
oracle提供可以把pl sql程式儲存在資料庫中,並可以在任何地方來執行它。這樣就叫儲存過程或函式。儲存過程和函式統稱為pl sql子程式,它們是被命名的pl sql塊,均儲存在資料庫中,並通過輸入 輸出引數或輸入 輸出引數與其呼叫者交換資訊。儲存過程和函式的唯一區別是 函式有個返回值,而儲存過...