標籤:mysql 資料庫 預存程序 調試 問題 亂碼
mysql預存程序錯誤調試記錄
公司平台在mysql資料庫上運行,一些預存程序報錯,調試過程痛苦,記錄錯誤及解決辦法,供參考。
調試環境:dbForge Studio for MySQL 6.1版本,試用版;
1、BIZ_GET_ORGAN_BY_CONDITION
問題1:提示遞迴調用錯誤,遞迴次數太多;根據業務設定,最大255;
[email protected]@max_sp_recursion_depth = 10;
常見如亂碼造成導致條件失效,出現死迴圈;
問題2:變數的內容是亂碼,資料庫內容是中文,urt-8
declarevc_agency_type varchar(64) CHARACTER SET utf8;
定義變數時,需設定字元集;
問題3:預存程序參數傳遞中文,是亂碼;定義參數同上;
2、BIZ_QUERY_USER_BY_CONDITION
問題1:row_count()返回-1
select語句的返回值用FOUND_ROWS();row_count()一般是插入、修改、刪除的影響行數;
問題2:mysql關於整數的除法
declare page_count int;
set page_count = 15 / 10 ;結果自動四捨五入為 2;
改用下面的語句:set page_count =FLOOR(result_count / page_size);
3、C3_BIZ_DATA_LIMIT
問題1:遊標有記錄,但是取值為空白:遊標語句中的變數不能和欄位同名,且不要是關鍵字;
問題2:遊標取不到值;
欄位名稱和變數名稱一定不能相同;如果必須相同,給表加上別名進行區別;
問題3:out參數不能傳值
修改成inout類型,預存程序共有三種類型:in out inout;
問題4:right函數改成subStr函數;
4、BIZ_CHANGER_ORG_PARENT_ID
問題1:mysql沒有if not exists文法,所以需要取總數,然後在判斷行數量;
問題2:update不支援子查詢問題;
update sys_org set leaftype = 1where id = (
selectorg_parent_id from sys_org where id = 變數
);
修改為:
update sys_org set leaftype = 1where id = (
select org_parent_id from
(select* from sys_org WHERE id = vc_source_id ) a
);
mysql 預存程序錯誤調試記錄