gpt4 book ai didi

mysql - 带有 SELECT 的简单 sql 函数

转载 作者:行者123 更新时间:2023-11-29 10:37:23 26 4
gpt4 key购买 nike

我尝试理解函数是如何工作的。我可以在 procedure 中进行等效操作,但无法使用 select 创建简单的函数。

元素UNIQUE并且事物主要

CREATE DEFINER=`root`@`localhost`
FUNCTION `get_element_by_thing`(`thing` VARCHAR(255))
RETURNS VARCHAR(255)
CHARSET utf8
NOT DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER

DECLARE @return_element VARCHAR(255);

SET @return_element = (
SELECT
`element`
FROM
`table1`
WHERE
`thing` = thing
);

RETURN @return_element;

我使用phpmyadmin界面。

最佳答案

1) 不要声明用户定义的变量。

MySQL 存储程序中的局部变量名称​​不以@ 符号开头。举个例子:

 DECLARE stored_program_local_variable VARCHAR(255);
SET stored_program_local_variable = 'somevalue';

用户定义变量的名称以 @ 符号开头。 (at 符号是将用户定义的变量与其他标识符区分开来的。)在存储的程序中声明用户定义的变量是无效的。要创建用户定义变量,只需为其赋值即可。例如:

 SET @user_defined_variable = 'somevalue';

2) 如果我们不需要保留超出存储程序范围的变量,我们通常使用局部变量,它们仅在存储程序执行期间存在。 (这与 session 级别的用户定义变量的行为不同。)

3) 使用SELECT ... INTO 语法将标量值检索到用户定义或局部变量中。 https://dev.mysql.com/doc/refman/5.7/en/select-into.html

<小时/>

尝试:

DELIMITER $$

CREATE DEFINER=`root`@`localhost`
FUNCTION `get_element_by_thing`(`thing` VARCHAR(255))
RETURNS VARCHAR(255)
...

BEGIN
DECLARE return_element VARCHAR(255) ;

SELECT t1.element
INTO return_element
FROM table1 t1
WHERE t1.thing = thing
LIMIT 1 ;

RETURN return_element ;

END $$

DELIMITER ;

注意:对于不明确的标识符(即 SQL 语句中的例程参数和列同名),例程参数优先于列名。使用表名或表别名来限定列引用,这样就不会产生歧义。I更喜欢分配与列名称不匹配的例程参数(和局部变量)名称。

如果由于某种原因需要在 SQL 语句中为用户定义的变量赋值,可以使用 := 赋值运算符。这在存储程序的上下文之外也有效。

 SELECT @user_defined_variable := t.somecolumn
FROM mytable t
WHERE somecondition
ORDER BY someexpression
LIMIT 1

关于mysql - 带有 SELECT 的简单 sql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46181758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com