MySQL資料庫中的儲存過程和函式的操作

2021-07-12 01:22:26 字數 3027 閱讀 3779

在實際操作中,不是單條sql語句所能實現。因為實現這個完整操作需要編寫針對表的多條sql語句。在執行過程中需要根據前面sql語句的執行結果有選擇的執行後面的sql語句。因此,需要用到mysql軟體提供的資料庫物件儲存過程和函式。

儲存過程和函式可以簡單理解為一條或多條sql語句的集合。儲存過程和函式就是事先經過編譯並儲存在資料庫中的一段sql語句集合。

儲存過程和函式的執行不是由程式呼叫,也不是由手動啟動,而是由事件來觸發、啟用從而實現執行。而儲存過程和函式的執行,則需要手動呼叫儲存過程和函式的名字並需要指定相應的引數。

函式必須有返回值,而儲存過程沒有。儲存過程的引數型別遠遠多於函式引數型別。

儲存過程和函式的優點:

儲存過程和函式允許標準元件式程式設計,提高了sql語句的重用性、共享性和可移植性;

儲存過程和函式能夠實現較快的執行速度,能夠減少網路流量;

儲存過程和函式可以被作為一種安全機制來利用。

1.儲存過程和函式建立

#建立名為proce_employee_sal的儲存過程

delimiter $$

create procedure proce_employee_sal ()

comment '查詢所有雇員的工資'

begin

select sal

from t_employee;

end$$

delimiter;

上述**,建立了乙個名為proce_employee_sal的儲存過程,主要用來實現通過select語句從t_employee表中查詢sal字段值,實現查詢雇員工資功能。

#建立名為func_employee_sal的函式

delimiter $$

create function func_employee_sal (empno int (11))

returns double(10,2)

comment '查詢某個雇員的工資'

begin

return (select sal

from t_employee

where t_employee.empno=empno);

end$$

delimiter ;

在上述**,建立了乙個名為func_employee_sal的函式,該函式擁有乙個型別為int(11)名為empno的引數,返回值為double(10,2)型別。select語句從t_employee表中查詢empno字段值等於所傳入引數empno值的記錄,同時並將該條記錄的sal欄位的值返回。

2.使用游標

mysql軟體的查詢語句可以返回多條記錄結果,通過游標來遍歷這些記錄結果。通過指定由select語句返回的行集合(包括滿足該語句的where子句所列條件的所有行),由該語句返回完整的行集合叫作結果集。應用程式需要一種機制來一次處理結果集中的一行或連續的幾行,而游標通過每次指向一條記錄完成與應用程式的互動。

游標可以看做是一種資料型別,可以用來遍歷結果集,相當於指標,或者是陣列中的下標。處理結果集的方法可以通過游標定位到結果集的某一行,從當前結果集的位置搜尋一行或一部分行或者對結果集中的當前行進行資料修改。

drop procedure if exists employee_count;

delimiter $

#建立儲存過程

create procedure employee_count (out num integer)

begin

#宣告變數

declare employee_sal integer;

declare flag integer;

#宣告游標

declare cursor_employee

cursor for select sal from t_employee;

declare continue handler for not found set flag=1;

#設定結束標誌

set flag=0;

set num=0;

#開啟游標

open cursor_employee;

#遍歷游標指向的結果集

fetch cursor_employee into employee_sal;

while flag<>1 do

if employee_sal >999 then

set num=num+1;

end if;

fetch cursor_employee into employee_sal;

end while;

#關閉游標

close cursor_employee;

end $

delimiter ;

3.檢視儲存過程和函式

show procedure status like 'proce_employee_sal' \g

show function status like 'func_employee_sal' \g

通過檢視系統表information_schema.routines實現檢視儲存過程和函式的資訊

use information_schema;

select * from routines \g;

select *

from routines

where specific_name='proce_employee_sal' \g

show create procedure proce_employee_sal \g   #檢視儲存過程定義資訊

show create function func_name \g  #檢視函式定義資訊

4.修改儲存過程和函式

alter table t_dept

rename tab_dept;

5.刪除儲存過程和函式

drop procedure proce_name;

最後通過系統表routines查詢是否存在儲存過程物件proce_name。

select *

from routines

where specific_name='proce_name'  \g

mysql資料庫 儲存過程

類似於 函式 是一組為了完成特定功能的sql語句集,第一次編譯,以後可以直接呼叫不需要再次編譯。根據定義的不同需要傳入引數 1 增強sql語言的功能和靈活性 儲存過程可以用控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。2 標準元件式程式設計 儲存過程被建立後,可以在程式中被多次呼叫...

oracle和mysql資料庫的儲存過程

使用儲存過程是為了快速在資料庫裡造一批資料,mac可以使用sqlpro for oracle 建表語句 create table pdmstest18 uid number 10,0 firstname varchar2 20 not null enable,lastname varchar2 20...

MySQL資料庫檢視儲存過程和函式

一.查詢資料庫中的儲存過程和函式 方法一 select name from mysql.proc where db your db name and type procedure 儲存過程 select name from mysql.proc where db your db name and t...