mysql 结束符报错_【踩坑记录】MySQL 实现自定义递归函数
因項目需要,需根據某個商品類別path,查詢該類別下的所有子類別
表? goods-categories(path,parent_id,id)
該處使用的表為臨時創建的表 t1(id,parent_id,code)
最終成品代碼:
DELIMITER //
drop function if exists f1;
create function f1(tableId int)
returns VARCHAR(200)
begin
declare p1 varchar(2000);
declare p2 varchar(200);
declare p3 varchar(200);
declare p4 varchar(200);
set p1 ='';
set p3 ='';
set p4 ='';
set p2 = cast(tableId as char);
while p2 is not null do
set p1 = concat(p1,',',p3);
set p4 = p2;
select group_concat(id) into p2 from t1
where find_in_set(parent_id,p2)>0;
select group_concat(code) into p3 from t1
where find_in_set(parent_id,p4)>0;
end while;
return p1;
end//
【錯誤1】: 函數結尾使用 end;? 報錯。
【解決方案】: 使用?DELIMITER //? ?定義結束符。因為MySQL默認【;】為結束符,但是函數中又避免不了要寫sql,所以會提前遇到【;】導致不正常結束。所以定義// 為結束符,這樣MySQL就能執行完整的函數結構體,而不是函數的中途的某個分號就執行了。
【錯誤2】:group_concat 函數使用錯誤,在sql后面增加了 group by?id【其實這個地方使用id就是業務上的錯誤了】,導致了一次查詢會有多條記錄,而? select into 參數a? ,返回多條記錄時會報錯;
【錯誤3!!!】參數名 使用id ,? create function f1(id int)
導致出現了奇奇怪怪的問題,耗費了我大部分的時間。
【錯誤4】select group_concat(id) into p2,group_concat(code) into p3?from t1
where find_in_set(parent_id,p2)>0;
不能在 一個select語句里面返回給兩個對象,會報語法錯誤
總結
以上是生活随笔為你收集整理的mysql 结束符报错_【踩坑记录】MySQL 实现自定义递归函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java输出箭头_java基于XSSF
- 下一篇: java conterller_java