mysql中儲存過程學習

2021-07-03 03:21:53 字數 2596 閱讀 1513

例項:獲取登入、登出、操作日誌、命令日誌(從系統日誌表查詢,命令日誌表查詢結過儲存到臨時表中,得到所有的日誌,然後按條件進行篩選)

create function getlog(uname varcharacter(200),starttime datetime,endtime datetime,logtype varchar(2),logremark varchar(200),page int(11),pagesize int(11),out total int)

begin

declare t_item varchar(1);  

drop table if exists t;

/**--建立臨時表-**/

create temporary table t(

userid varcharacter(20),

username varcharacter(100),

time datetime ,

remark varcharacter(512),

type varchar(1)

);/**-將systemlog、command_log表資料插入到臨時表中-**/

set t_item = 1; /*--登入--*/

insert into t(`userid` ,`username`,`time`,`remark`,`type`) 

select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation="登入";

set t_item = 2; /*--登出--*/

insert into t(`userid` ,`username`,`time`,`remark`,`type`) 

select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where  s.operation="登出";

set t_item = 3;/*--操作日誌--*/

insert into t(`userid` ,`username`,`time`,`remark`,`type`) 

select s.userid,m_user.username,s.time,s.remark,t_item from systemlog s left join m_user on m_user.userid=s.userid where s.operation!="登入" and s.operation!="登出";

set t_item = 4;/*--命令日誌--*/

insert into t(`userid` ,`username`,`time`,`remark`,`type`) select c.userid,m_user.username,c.send_command_dt,c.send_command_comment,t_item from command_log c  left join m_user on m_user.userid=c.userid ;

select count(*) into total from t left join m_user on m_user.userid=t.userid where t.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'%')  and t.time between starttime and endtime and t.remark like concat('%',logremark,'%');

/**--查詢日誌-**/

select t.userid,m_user.username,t.time,t.remark,t.type,total from t left join m_user on m_user.userid=t.userid where t.type like concat('%',logtype,'%') and m_user.username like concat('%',uname,'%')  and t.time between starttime and endtime and t.remark like concat('%',logremark,'%') order by t.time desc limit page,pagesize;

end定義與使用變數時需要注意以下幾點: 

◆ declare語句必須用在degin…end語句塊中,並且必須出現在degin…end語句塊的最前面,即出現在其他語句之前。 

◆ declare定義的變數的作用範圍僅限於declare語句所在的degin…end塊內及巢狀在該塊內的其他degin…end塊。 

◆ 儲存過程中的變數名不區分大小寫。 

定義後的變數採用set語句進行賦值,語法格式如下: 

set var_name = expr [,var_name = expr] ... 

其中,var_name為變數名,expr為值或者返回值的表示式,可以使任何mysql支援的返回值的表示式。一次可以為多個變數賦值,多個「變數名=值」對之間以逗號「,」隔開。 (摘錄)

mysql中儲存過程

delimiter,簡單解釋下這個命令的用途,在mysql中每行命令都是用 結尾,回車後自動執行,在儲存過程中 往往不代表指令結束,馬上執行,而delimiter原本就是 的意思,因此用這個命令轉換一下 為 這樣只有收到 才認為指令結束可以執行 檢視myql中已經存在的儲存過程 show proce...

mysql中儲存過程

儲存過程,其本質還是函式 但其規定 不能有返回值 說明 1,in 用於設定該變數是用來 接收實參資料 的,即 傳入 預設不寫,就是in 2,out 用於設定該變數是用來 儲存儲存過程中的資料 的,即 傳出 即函式中必須對它賦值 3,inout 是in和out的結合,具有雙向作用 4,對於,out和i...

Oracle中儲存過程

1 建立乙個儲存過程 create or replace procedure pro name parameter1 parameter2 is as begin plsql sentences pl sql語句,儲存過程功能實現的主體 exception dowith sentences 異常處理...