在 SingleStore 中调用过程时出现未知系统变量

问题描述 投票:0回答:1

我在 SingleStore 中创建了以下过程

DELIMITER //
CREATE OR REPLACE PROCEDURE updateColumnModelName(tableName TEXT, columnName TEXT) AS
  DECLARE has_column INT DEFAULT 0;
  DECLARE command TEXT;
  BEGIN
    SELECT EXISTS (
     SELECT *
     FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME = tableName
     AND COLUMN_NAME = columnName
    ) INTO has_column;

     IF has_column THEN
       SET command = CONCAT('ALTER TABLE ', table_name, ' ADD COLUMN ', column_name, ' LONGTEXT CHARACTER SET utf8mb4 NOT NULL');
     ELSE
       SET command = CONCAT('ALTER TABLE ', table_name, ' DROP COLUMN ', column_name);
     END IF;
    
     EXECUTE IMMEDIATE command;

   END //
DELIMITER ;

程序创建没有问题,但是当我通过

调用它时

CALL updateColumnModelName("Transcription", "ModelName");

我收到以下错误:

错误 1193 ER_UNKNOWN_SYSTEM_VARIABLE:未处理的异常 类型:ER_UNKNOWN_SYSTEM_VARIABLE (1193) 消息:未知的系统变量“comand”调用堆栈:#0 第 13 行 in

example_db
updateColumnModelName

我尝试使用不同的方法

DECLARE dynamic_sql TEXT;  
....  
SET @stmt = command;     
PREPARE stmt FROM @stmt;      
EXECUTE stmt;      
DEALLOCATE PREPARE stmt;

但是在这种情况下收到以下错误:

ERROR 1149 ER_SYNTAX_ERROR: line 20, syntax error at or near "stmt"

database stored-procedures procedure singlestore
1个回答
0
投票

其实我也成功解决了这个问题。它与变量名有关,因为我对通过引用函数传递的值感到困惑。

这是可行的版本,以防任何人需要。

DELIMITER //

CREATE OR REPLACE PROCEDURE updateColumnModelName(tableName TEXT, columnName TEXT) AS
DECLARE has_column INT DEFAULT 0;

BEGIN
  SELECT EXISTS (
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = tableName
    AND COLUMN_NAME = columnName
  ) INTO has_column;

    IF NOT has_column THEN
      EXECUTE IMMEDIATE CONCAT('ALTER TABLE ', tableName, ' ADD COLUMN ', columnName, ' LONGTEXT CHARACTER SET utf8mb4 NOT NULL');
    END IF;
    
END //

DELIMITER ;
© www.soinside.com 2019 - 2024. All rights reserved.