4

初めてのストアド関数の作成を開始したばかりなので、いくつか問題があります。現在、関数を呼び出しますSELECT test();(test は今のところ関数名です)。関数 (ユーザー名 ID) に番号を送信し、ユーザー名を返したいと考えています。

1SELECT test(1);はテーブル内のユーザーの ID です。これはユーザー名が返されるように機能するようですが、任意の数字を入力すると同じユーザー名も返されます。

BEGIN 

 DECLARE new_username VARCHAR(90);    

    SELECT `username` INTO  new_username FROM `users` WHERE `ID` = ID;

 return new_username;
END

パラメータを に設定しましたID int

キーワードINTOがユーザー名の値を変数に入れると考えるのは正しいnew_usernameですか? なしで実行するとINTO、エラーが発生します。

関数から結果セットを返すことはできません

これで明らかな間違いを犯したことがありますか?完全に間違っていないことを願っています。アドバイスをありがとう:)。

編集:テーブルにさらにいくつかの行を追加したところ、エラーが発生しました:

結果は複数の行で構成されていました

完全な SQL バージョン:

CREATE DEFINER=`elliotts`@`%` FUNCTION `test`(ID int) 
RETURNS varchar(32) CHARSET latin1
BEGIN 

    DECLARE new_username VARCHAR(32);

    SELECT `username` 
      INTO new_username 
      FROM `users` 
     WHERE `ID` = ID;

    return new_username;

END
4

1 に答える 1

4

使用する:

DROP FUNCTION IF EXISTS `example`.`test` $$
CREATE FUNCTION `example`.`test` (param INT) RETURNS VARCHAR(32)
BEGIN

  DECLARE new_username VARCHAR(32);

    SELECT `username`
      INTO new_username
      FROM `users`
     WHERE `ID` = param;

    RETURN COALESCE(new_username, 'Username not found');

END $$

RETURN 値の VARCHAR の長さが変数と一致することに注意してください。これは、返す列の長さと一致する必要があります。

于 2010-10-19T15:52:39.533 に答える