在 MariaDB v10.1.xx 中创建过程

Create a procedure in MariaDB v10.1.xx

我有一个关于重新索引 ID 列的问题SQL。

SET @ newid = 0;
UPDATE tablename SET id = (@ newid: = @ newid + 1) ORDER BY id;

此查询 SQL 工作正常。 我正在尝试将此查询 SQL 包含在存储过程中。

ODDĚLOVAČ //
VYTVOŘTE POSTUP reindex
(
      V par VARCHAR (50)
)
ZAČÍT

SET @ newid = 0;
UPDATE dbName.par SET id = (@ newid: = @ newid + 1) ORDER BY id;

KONEC //
ODDĚLOVAČ ;

程序已创建并保存。调用过程时出现问题。

CALL reindex (souhrn); 

其中 'souhrn' 是表的名称。 调用“reindex”存储过程返回:

\ # 1054 - Neznámý sloupec 'souhrn' v 'seznamu polí'

我不知道为什么当程序应用于特定的“jmeno_tabulky”时程序返回“未知列”。我哪里错了吗?非常感谢。

您需要使用动态 SQL 在您的过程中创建 UPDATE 查询,然后 PREPAREEXECUTE 它:

CREATE PROCEDURE reindex
(
    IN par VARCHAR(50)
)
BEGIN
    SET @newid=0;
    SET @sql = CONCAT('UPDATE dbName.', par, ' SET id=(@newid:=@newid+1) ORDER BY id');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END 

Demo on dbfiddle