0

Mám dotaz SQL pro reindexování sloupce ID.

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

Tento dotaz SQL funguje správně. Pokouším se zahrnout tento dotaz SQL do uložené procedury.

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Č ;

Postup je vytvořen a uložen. K problému dochází při volání procedury.

CALL reindex (souhrn); 

Kde 'souhrn' je název tabulky. Volání uložené procedury „reindex“ se vrací:

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

Nevím, proč se procedura vrací „Neznámý sloupec“, když je procedura aplikována na konkrétní „jméno_tabulky“. Mám někde chybu? Děkuji mnohokrát.

4

1 回答 1

1

You need to use dynamic SQL to create the UPDATE query inside your procedure and then PREPARE and EXECUTE it:

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

于 2019-12-07T01:18:23.883 回答