Произошло необработанное исключение win32 в pgAdmin4.exe

Вам нужно использовать подготовленные операторы для имени динамической таблицы. Подготовленные утверждения поддерживают параметры, но вы не можете использовать их для имен таблиц.

Также, чтобы поместить строки вместе, вы должны использовать CONCAT().

О, и вам нужно сделать все это в хранимой процедуре.

Создайте такой вот:

DELIMITER $$
CREATE PROCEDURE sp_exec_dynStmt()
BEGIN
SET @id := 47; /*The single-quotes made it a string, that's not necessary*/
SET @table := CONCAT(@id, '_2013_2014_voucher');

SET @sql := CONCAT('SELECT * FROM ', @table, ';');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = CONCAT('DELETE FROM ', @table, ' WHERE id = ?;'); /*The id can be a parameter, but not the table name*/
PREPARE stmt FROM @sql;
EXECUTE stmt USING @id; 
END $$
DELIMITER ;

Затем выполните его следующим образом:

CALL sp_exec_dynStmt();
0
задан shamil puthukkot 4 March 2019 в 05:54
поделиться