在 Mariadb 中定义变量

Defining variable in Mariadb

我在 MariaDB 版本 10.3.22 中尝试了很多使用用户定义变量的方法。在我的应用程序中使用它失败后,我想尝试一个简单的例子:

DECLARE @EmpName1 NVARCHAR(50)
SET @EmpName1 = 'Ali'
PRINT @EmpName1 

给出无法识别的语句类型。 (在位置 0 的“DECLARE”附近)

经过一番挖掘后,我尝试在定界符之间使用它并作为创建的函数使用它:

DELIMITER //
CREATE FUNCTION test
DECLARE @EmpName1 VARCHAR(50)
SET @EmpName1 = 'Ali'
PRINT @EmpName1 
END //
DELIMITER;

这给出了

  1. 无法识别的数据类型。 (在位置 54 的“)”附近)
  2. 需要“RETURNS”关键字。 (在位置 110 的“END”附近)

我无法弄清楚问题出在哪里,因为据我所知,MariaDB 文档具有相同的语法。

谁能帮忙解决这个问题?我的最终目标是将查询的单个结果作为字符串分配给变量。

一些语法问题:

  1. 需要在函数名后面设置一个(),即使没有使用参数:

    CREATE FUNCTION test()
    
  2. 之后必须指定函数的return数据类型:(我使用与您的变量相同的type/size。当然可以是其他类型,具体取决于正在 returned)

    CREATE FUNCTION test() returns varchar(50)
    
  3. 使用@不需要的变量,每行末尾也缺少;,加上PRINT是无效的:

    DECLARE EmpName1 VARCHAR(50);
    SET EmpName1 = 'Ali';
    -- PRINT EmpName1; see item 4
    
  4. 函数应 return 一个值:

    RETURN EmpName1; -- I simply replaced the PRINT with RETURN here.
    

将所有这些放在一起,完整的定义变为:

DELIMITER //

CREATE FUNCTION test() RETURNS VARCHAR(50)
BEGIN
    DECLARE EmpName1 VARCHAR(50) DEFAULT '';
    SET EmpName1 = 'Ali';
    RETURN EmpName1;
END //

DELIMITER ;

然后创建之后,使用函数:

SELECT test();

互动示例:

root@localhost(test) DELIMITER //
    ->     CREATE FUNCTION test() RETURNS VARCHAR(50)
    ->     BEGIN
    ->         DECLARE EmpName1 VARCHAR(50);
    ->         SET EmpName1 = 'Ali';
    ->         RETURN EmpName1;
    ->     END //
Query OK, 0 rows affected (0.07 sec)

root@localhost(test)
root@localhost(test)  DELIMITER ;

root@localhost(test) select test();
+--------+
| test() |
+--------+
| Ali    |
+--------+
1 row in set (0.09 sec)

虽然该网站不使用 DELIMITER,但您也可以在 this DB fiddle 上看到它的实际应用。