在 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;
这给出了
- 无法识别的数据类型。 (在位置 54 的“)”附近)
- 需要“RETURNS”关键字。 (在位置 110 的“END”附近)
我无法弄清楚问题出在哪里,因为据我所知,MariaDB 文档具有相同的语法。
谁能帮忙解决这个问题?我的最终目标是将查询的单个结果作为字符串分配给变量。
一些语法问题:
需要在函数名后面设置一个()
,即使没有使用参数:
CREATE FUNCTION test()
之后必须指定函数的return数据类型:(我使用与您的变量相同的type/size。当然可以是其他类型,具体取决于正在 returned)
CREATE FUNCTION test() returns varchar(50)
使用@
不需要的变量,每行末尾也缺少;
,加上PRINT
是无效的:
DECLARE EmpName1 VARCHAR(50);
SET EmpName1 = 'Ali';
-- PRINT EmpName1; see item 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 上看到它的实际应用。
我在 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;
这给出了
- 无法识别的数据类型。 (在位置 54 的“)”附近)
- 需要“RETURNS”关键字。 (在位置 110 的“END”附近)
我无法弄清楚问题出在哪里,因为据我所知,MariaDB 文档具有相同的语法。
谁能帮忙解决这个问题?我的最终目标是将查询的单个结果作为字符串分配给变量。
一些语法问题:
需要在函数名后面设置一个
()
,即使没有使用参数:CREATE FUNCTION test()
之后必须指定函数的return数据类型:(我使用与您的变量相同的type/size。当然可以是其他类型,具体取决于正在 returned)
CREATE FUNCTION test() returns varchar(50)
使用
@
不需要的变量,每行末尾也缺少;
,加上PRINT
是无效的:DECLARE EmpName1 VARCHAR(50); SET EmpName1 = 'Ali'; -- PRINT EmpName1; see item 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 上看到它的实际应用。