mysql存儲過程查詢實例
SELECT * FROM mysql.proc
WHERE type = 'PROCEDURE'
AND specific_name = 'P_UserBetDayDetail'
AND Body LIKE '%Report_UserBetDayDetail%';
mysql.proc:表示查詢的目標表;
type = 'PROCEDURE':表示查詢的是存儲過程;
specific_name = 'P_UserBetDayDetail' :表示查詢的具體存儲過程名稱;
Body LIKE '%Report_UserBetDayDetail%':表示存儲過程內容中包含的表。
B. 存儲過程怎麼在mysql查詢里執行
方法一:(直接查詢,比較實用,查看當前自定義的存儲過程)
select `specific_name` from MySQL.proc where `db` = 'your_db_name' and `type` = 'procere'
方法二:(查看資料庫里所有存儲過程+內容)
show procere status;
方法三:(查看當前資料庫里存儲過程列表)
select specific_name from mysql.proc ;
方法四:(查看某一個存儲過程的具體內容)
select body from mysql.proc where specific_name = 'your_proc_name';
查看存儲過程或函數的創建代碼 :
show create procere your_proc_name;
show create function your_func_name;
C. mysql存儲過程實現數據查詢與插入
INSERT into total_score_tmpD(
DepartmentNameEnd, StaffId,
StaffName,
CountPerHour,
SkillScoreDisCount ,
DealCount ,
ValueCount,
ValueCountDisCount
)
SELECT DepartmentName, StaffId,
StaffName,
3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*AVG(DealAvgSeconds/WaitSeconds) ,
Round(3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*avg(DealAvgSeconds/WaitSeconds)/(select Max(SunValue) From total_score_tmp33)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作技能權重'),2),
count(StaffId),
Sum(DealValue),
Round(Sum(DealValue)/(select Max(SunValue) From total_score_tmp44)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作效益權重'),2)
From deal_record
where DepartmentName like concat(DepartmentName2,'%') and DealDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;
insert into total_score_tmpc(DepartmentName , StaffId,
StaffName,
ClientNum ,
EvaluateScore ,
EvaluateScoreDisCount)
SELECT DepartmentName, StaffId,
StaffName,
count(StaffId),
Sum(EvaluatePrice),
Round((Sum(EvaluatePrice)/(select Max(SunValue) From total_score_tmp22))*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='服務評價權重'),2)
From evaluate_record
where DepartmentName like concat(DepartmentName2,'%') and EvaluateDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;
D. MySQL 存儲過程,獲取使用游標查詢的結果集
MySQL 存儲過程中,使用游標查詢,返回的是結果集時,如何查看調用存儲過程輸出結果呢?
解決方案:存儲過程不返回數據,但它能創建和填充另一個表。所以在存儲過程運行中創建臨時表。該臨時表將保存存儲過程中生成的結果集,在遍歷游標時,用insert保存每條數據到臨時表中。後續調用時可以用select語句查詢臨時表中的存儲過程運行結果。
以下有 三種方式 使用游標創建一個存儲過程,統計某一部門下的員工信息
方法一:Loop循環
調用存儲過程:
方法二:While 循環
調用存儲過程:
方法三:REPEAT 循環
調用存儲過程:
上述三種實現方法在測試過程中遇到下述問題。
調用存儲過程查詢臨時表輸出結果時,會發現多循環了一次,像這樣:
解決方法:
在遍歷游標查詢結果時,先判斷游標的結束標志(done) 是否是為1,如果不是1,則向臨時表中插入數據。
E. mysql 存儲過程
.關於MySQL的存儲過程
存儲過程是資料庫存儲的一個重要的功能,但是MySQL在5.0以前並不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0終於開始已經支持存儲過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫編程的靈活性。
MySQL存儲過程的創建
(1).格式
MySQL存儲過程創建的格式:CREATE PROCEDURE過程名([過程參數[,...]])
[特性...]過程體
這里先舉個例子:
mysql>DELIMITER//
mysql>CREATEPROCEDUREproc1(OUTsint)
->BEGIN
->SELECTCOUNT(*)INTOsFROMuser;
->END
->//
mysql>DELIMITER;
- 註:
(1)這里需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。
(2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
(3)過程體的開始與結束使用BEGIN與END進行標識。
F. MySQL怎麼寫存儲過程查詢某個表的某一條記錄,並把這條記錄的所有列名對應的值以json格式返回呢
給你個思路吧,既然你能問出這種問題應該是有了思路就會自己做的人,就不幫你寫代碼了。
首先,你確定這個表的所有欄位中沒有二進制內容,如果沒有的話,下面這個思路你可以試試,但是如果有的話估計就需要對二進制進行特別的處理了,如果你有的話再追問吧。
思路開始:
1.如果你是對一張確定的表(提前已經知道表結構)進行這樣的處理,那就查詢出來一條記錄,通過Mysql的字元串拼接函數CONCAT,按照JSON格式,慢慢的拼一個字元串,最後通過select這個字元串返回這個字元串就行了。
2.如果之前你並不知道,這個表的結構,甚至你根本不知道自己要處理的是那張表,那麼存儲過程中你需要傳遞一個表名進來,然後查詢information_schema資料庫中的COLUMNS表,從而獲得這個表的具體欄位信息,以及各個欄位的先後順序(為後面拼接字元串使用),剩下的就跟1中描述的思路一樣了。
雖然不知道你的用處是什麼,不過,以我個人的經驗,這種返回JSON的方式並不可取,這樣會增加資料庫的負擔,理論上應該是將數據出來後自己在程序中拼接。
G. 求一個詳細的mysql 存儲過程例子,帶寫日誌的那種,不要也不要太簡單啊。
如果想帶日誌只有自己寫了,可以使用row_count()返回改的的行數
例如
create procere p_a1(in p_id int,in p_name varchar(20),out p_out varchar(200))
begin
declare p_cm int;
set p_cm = 0;
insert into a1(id,name) values(p_id,p_name);
select row_count() into p_cm;
if (p_cm = 1)
then
set p_out = '成功';
else
set p_out = '不成功';
end if;
end;
mysql> call p_a1(5,'KK',@a2)//
Query OK, 1 row affected (0.01 sec)
mysql> select @a2//
+--------+
| @a2 |
+--------+
| 成功 |
+--------+
1 row in set (0.01 sec)
以上來自手打,希望對你有幫助!呵呵~