mysql - 带有 SELECT 的简单 sql 函数

标签 mysql sql phpmyadmin

我尝试理解函数是如何工作的。我可以在 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/

相关文章:

mysql - MYSQL中CASE语句一次搜索多个字段值的条件

MySQL:插入错误 "Cannot be NULL"-- DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

mysql - docker-compose:mariadb - 连接被拒绝

php - PDO INSERT INTO 准备好的数组

php - 检查 PDO 语句的结果以运行条件

mysql - 使用 Unix TimeStamp 格式的数据计算每月行数的 SQL 查询

java - Oracle 日期转换错误 ORA-01858

mysql - 无法登录 phpmyadmin

mysql - 哪个 UTF8 - phpMyAdmin 可以正确显示中文、俄文、阿拉伯文?

python - 使用 django F() 对象更新多列