例項:獲取登入、登出、操作日誌、命令日誌(從系統日誌表查詢,命令日誌表查詢結過儲存到臨時表中,得到所有的日誌,然後按條件進行篩選)
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 異常處理...