使用SELECT的简单sql函数

时间:2017-09-12 16:46:18

标签: mysql sql phpmyadmin

我试着理解函数是如何工作的。我可以在select中创建等效项,但我无法使用element创建一个简单的函数。

UNIQUEthingPRIMARYCREATE 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

我使用self.textboxAnswer1.resize(100,50) self.textboxAnswer2.resize(100,50) self.textboxAnswer3.resize(100,50) self.textboxAnswer4.resize(100,50) self.textboxAnswer5.resize(100,50) self.textboxAnswer6.resize(100,50) 界面。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

 SET @user_defined_variable = 'somevalue';

2)如果我们不需要将变量保存在存储程序的范围之外,我们通常使用局部变量,这些变量仅在存储程序执行期间存在。 (这与会话级别的用户定义变量的行为不同。)

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语句中具有相同名称的例程参数和列,例程参数优先于列名。使用表名或表别名限定列引用,因此它不含糊。我更喜欢分配与列名不匹配的例程参数(和局部变量)。

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

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