【问题标题】:MySQL local variablesMySQL 局部变量
【发布时间】:2012-11-20 04:12:49
【问题描述】:

我正在尝试为查询定义和初始化 MySQL 变量。

我有以下几点:

declare @countTotal int;
SET @countTotal = select COUNT(*)
 from nGrams;

我在 Netbeans 中使用 MySQL,它告诉我有一个错误。我的错误是什么/在哪里?

我该如何解决这个问题?

【问题讨论】:

    标签: mysql variables set local declare


    【解决方案1】:

    MySQL 有两种不同类型的变量:

    • 局部变量@为前缀)是强类型的,并且作用于声明它们的存储程序块。请注意,如DECLARE Syntax 中所述:

      DECLARE 只允许在 BEGIN ... END 复合语句中使用,并且必须位于其开头,在任何其他语句之前。

    • user variables@ 为前缀)是松散类型的,并且范围仅限于会话。请注意,它们既不需要也不能声明——直接使用即可。

    因此,如果您正在定义一个存储程序并且确实想要一个“局部变量”,根据您问题中的措辞,您需要删除 @ 字符并确保您的 DECLARE 语句位于程序块的开始。否则,要使用“用户变量”,请删除 DECLARE 语句。

    此外,您需要将查询括在括号中,以便将其作为子查询执行:

    SET @countTotal = (SELECT COUNT(*) FROM nGrams);
    

    否则,您可以使用SELECT ... INTO

    SELECT COUNT(*) INTO @countTotal FROM nGrams;
    

    【讨论】:

      【解决方案2】:

      试试这个:-

       select @countTotal := COUNT(*) from nGrams;
      

      【讨论】:

      【解决方案3】:

      函数示例:

      DROP FUNCTION IF EXISTS test;
      
      DELIMITER $$
      CREATE FUNCTION test(in_number INT) RETURNS INT
          BEGIN
              DECLARE countTotal INT;
              SET countTotal = SELECT COUNT(*) FROM nGrams;
          RETURN countTotal + in_number;
      END $$
      DELIMITER ;
      

      【讨论】:

      【解决方案4】:

      根据DECLARE Syntaxdeclare 必须在 begin...end 块内。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-01
        • 2019-07-24
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多