日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 结束符报错_【踩坑记录】MySQL 实现自定义递归函数

發布時間:2025/3/15 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 实现自定义递归函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。