【问题标题】:Defining variable in Mariadb在 Mariadb 中定义变量
【发布时间】:2021-11-18 13:56:38
【问题描述】:

我在 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 文档的语法相同。

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

【问题讨论】:

    标签: mariadb declare


    【解决方案1】:

    一些语法问题:

    1. 需要在函数名后设置(),即使不使用参数:

      CREATE FUNCTION test()
      
    2. 之后必须指定函数的返回数据类型:(我使用了与您的变量相同的类型/大小。当然,可以是其他类型,具体取决于返回的内容)

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

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

      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 看到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2021-03-27
      • 2011-09-27
      • 2019-11-11
      • 2019-04-18
      • 2012-10-18
      • 1970-01-01
      相关资源
      最近更新 更多