Pergunta

Como posso usar instruções SQL dinâmicas em banco de dados MySQL e sem utilizar variáveis ??de sessão?

Agora eu tenho esse código um (em procedimento armazenado MySQL):

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId) THEN 
(...)

Mas eu gostaria de usar apenas variáveis ??locais, isso significa que eu gostaria de começar este procedimento com:

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

e não use @ qualquer caractere. Existe alguma maneira de fazer isso?

Foi útil?

Solução

Desculpe, declarações elaboradas em MySQL são sessão-global. De acordo com a http: //dev.mysql. com / doc / refman / 5.1 / en / sql-sintaxe preparados-statements.html , "Um preparado declaração também é global para a sessão."

E não há nenhuma outra maneira (além de declarações preparadas) para executar SQL dinâmico no MySQL 5.x

Então você pode, naturalmente, substituir "@s" acima, mas AFAIK você está preso com @SelectedId.

No MySQL 6.x, há um recurso previstas que irá adicionar uma declaração "EXECUTAR IMEDIATA", que irá executar SQL dinâmico. Consulte http://forge.mysql.com/worklog/task.php?id = 2793 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top