我试着理解函数是如何工作的。我可以在select
中创建等效项,但我无法使用element
创建一个简单的函数。
UNIQUE
是thing
和
PRIMARY
为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
我使用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)
界面。
答案 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