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.

Foi útil?

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
scroll top