1

私はこの関数を書きました:

delimiter //

CREATE FUNCTION randomDefVal(val varchar(30), tableName varchar(30)) 
    returns varchar(30)

    BEGIN

        SET @query = concat('SELECT ',val,' FROM ',tableName,' ORDER BY rand() LIMIT 1;');
        SET @result = NULL;
        PREPARE stmt1 FROM @query;
        return (EXECUTE stmt1);

    END//

しかし、最後の行にエラーがあります:

SQL Error (1336): Dynamic SQL is not allowed in stored function or trigger

これは、「return (EXECUTE stmt1);」と書くことができないことを示唆しています。「EXECUTE」ステートメントの結果となる値を返すにはどうすればよいですか?

4

1 に答える 1

1

あなたが望むのはSELECT ... INTOだと思います。BEGINしたがって、 and内に次のようなものがありますEND(このコードはテストしていないことに注意してください):

BEGIN
    DECLARE var_name VARCHAR(30);
    SET var_name = '';
    SELECT val INTO var_name FROM tableName ORDER BY rand() LIMIT 1;
    RETURN var_name;
END
于 2013-04-25T19:43:49.073 に答える