[英]mysql stored procedure declaration throws error on execution
嘗試創建此存儲過程時,我不斷收到此錯誤。我試圖編寫一個過程,以逗號分隔的字符串進行分割。類似於explode。我感覺到了。
這是錯誤
您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在'DECLARE start_pos,end_pos INT附近使用正確的語法; SET start_pos = 1; 在第6行SET end_pos = Locat'
我從SQL Server示例中復制了邏輯,並盡力將其轉換為MySql語法。
這是從頭到尾的整個過程。 我希望訓練有素的眼睛可以解釋為什么我出錯了。
DELIMITER $$
CREATE procedure split_string (in p_string_to_split VARCHAR(255),in p_delimiter CHAR(1) )
BEGIN
DROP TEMPORARY TABLE IF EXISTS split_channel_ids;
CREATE TEMPORARY TABLE split_channel_ids (p_channel_id int);
DECLARE start_pos, end_pos INT;
SET start_pos = 1;
SET end_pos = Locate(p_delimiter, p_string_to_split);
WHILE (start_pos < CHAR_LENGTH(p_string_to_split) + 1) DO
IF (end_pos = 0) THEN
SET end_pos = CHAR_LENGTH(p_string_to_split) + 1;
END IF;
--- INSERT split_channel_ids (p_channel_id)
--- VALUES(SUBSTRING(p_string_to_split, start_pos, end_pos - start_pos)) ;
SET start_pos = end_pos + 1;
SET end_pos = Locate(p_delimiter, p_string_to_split, start_pos);
END WHILE;
-- select * from imob_users;
select * from split_channel_ids;
END $$
DELIMITER ;
(在MySQL中) DECLARE
語句必須在其包圍BEGIN...END
塊的開頭。
在MS SQL中,它們可以在任何地方。 但這很煩人,因為它們沒有塊作用域,它們有過程作用域,所以您不能在獨立的塊中“重用”名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.