2017-04-13 71 views
0

如何在SQL函數中將查詢結果放入返回變量中。我還包括一些錯誤消息,它顯示了錯誤。我是SQL函數的新手,這將是很好,如果有人可以給出解釋有關這如何在SQL函數中將查詢結果放入返回變量函數

DELIMITER // 
CREATE FUNCTION fHW2_4_nuneedua(a varchar(50)) 
RETURNS varchar(50) 
BEGIN 
DECLARE result varchar(50) DEFAULT null; 
select if (a = NULL, 
      RAISERROR('please input a valid city name', 16, 1), 
      if((select * from dreamhome.guest where city = a) = 'NULL', 
        RAISERROR('Empty set', 16, 1), 
       (select GROUP_CONCAT(name) as output from dreamhome.guest where address like "% ' . $a . '%") 
      ) 
      ) INTO result 
RETURN result; 
END // 
DELIMITE 

我收到此函數的第12行上的錯誤。

+0

這個定義很難開始。爲什麼你在函數中使用'raiseerror',比如?也許你想要一個存儲過程。 –

+0

先生,我是新的存儲在SQL.I函數我想要在輸出中顯示錯誤。請你給我一些關於這個沒有使用存儲過程的參考? –

回答

0

最簡單的語法變化,我可以推薦,讓你去(爲一個函數)包括:

CREATE FUNCTION fHW2_4_nuneedua(@a Varchar(50)) 
RETURNS Varchar(50) 
AS 
BEGIN 
    IF @a IS NULL RETURN NULL 
    IF NOT EXISTS (SELECT * FROM dreamhome.guest WHERE city = @a) RETURN NULL 
    RETURN (SELECT GROUP_CONCAT(name) as output 
    FROM dreamhome.guest WHERE address LIKE "% ' . $" + @a + " . '%") 
END 

這是假定「dreamhome」是一個模式和「客人」是一個表...

+0

即使這是給錯誤。 它說在第1行的語法錯誤。 –

+0

@VarunGarg什麼是錯誤說?如果它是「這個函數已經存在」錯誤,那麼將「CREATE」一詞改爲「ALTER」。 – Sturgus