Instrução PREPARE
Sintaxe
PREPARE stmt_name FROM preparable_stmt
Descrição
A instrução PREPARE
, prepara uma instrução e atribui à ela um nome, stmt_name
, pelo qual irá se referir posteriormente. Os nomes de instrução não diferenciam maiúsculas de minúsculas. preparable_stmt
é um string literal, ou uma variável de usuário que contem o texto da instrução. O texto deve representar uma única instrução SQL, e não instruções múltiplas. Dentro da instrução, caracteres "?" podem ser usados como marcadores de parâmetros para indicar onde serão vinculados os valores dos dados à consulta mais tarde quando você executá-la. Os caracteres "?" não devem ser colocados entre aspas, mesmo que você deseje vinculá-los à valores de string. Marcadores de parâmetros podem ser usados só onde valores de dados devem aparecer, e não para palavras-chave SQL, identificadores, e assim por diante.
Se uma instrução preparada com o nome dado já existe, ela é desalocada implicitamente antes que esteja preparada a nova instrução. Isto significa que se a nova instrução contém um erro e não pode ser preparada, um erro será retornado e não existirá nenhuma instrução com o nome dado.
Uma instrução preparada é executada com EXECUTE
e liberada com DEALLOCATE PREPARE
.
O âmbito de uma instrução preparada é a sessão em que é criada. Outras sessões não podem vê-la
Exemplo
create table t1 (a int,b char(10)); insert into t1 values (1,"one"),(2, "two"),(3,"three"); prepare test from "select * from t1 where a=?"; set @param=2; execute test using @param; +------+------+ | a | b | +------+------+ | 2 | two | +------+------+ set @param=3; execute test using @param; +------+-------+ | a | b | +------+-------+ | 3 | three | +------+-------+ deallocate prepare test;