Frustrante MySQL CRIAR erro PROCEDIMENTO
-
11-09-2019 - |
Pergunta
Esperamos que este é um bom rápida único a determinação.
Aqui está o meu ficheiro.sql:
USE my_db;
DELIMITER $$
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT)
BEGIN
SELECT DISTINCT `suburb`, `postcode`
FROM `location`
WHERE `suburb` LIKE '%argQuery%'
OR `postcode` LIKE 'argQuery%'
LIMIT argLimit
;
END
$$
DELIMITER ;
Esta é a saída:
ERROR 1064 (42000) at line 4: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'argLimit
;
END' at line 8
Assim, parece não como o meu parâmetro argLimit, mas eu não posso trabalhar fora porque. Devo estar fazendo algo bobo.
Estou usando o MySQL 5.0.51.
Graças.
Solução
LIMIT
deve ser uma constante e não pode ser parametrizada dentro de um procedimento ou função em MySQL. No entanto, é possível solucionar esse problema usando o PREPARE ... EXECUTE ... USING
sintaxe.
Ele pode acabar parecendo um pouco como isto:
...
SET @qry= argQuery;
SET @lmt= argLimit;
PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?';
EXECUTE stmt USING @qry, @qry, @lmt;
DEALLOCATE PREPARE stmt;
Outras dicas
O link direto para o comentários de Marc Grue .
Truque para fazer isso : Obter o ID de tabela do comentário e criar uma âncora no URL.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow