0

Fala galera beleza?

Seguinte, estou montando uma procedure, onde insiro como parâmetro a quantidade de linhas que ele ira retornar e caso seja 0 ou esteja em branco, ele retorna todas as linhas possíveis, porém na minha lógica está dando erro de sintaxe e então precisava da opinião de vocês. Segue o que eu tenho feito:

CREATE DEFINER=`root`@`localhost` PROCEDURE `consultarPostagens`(
in cat varchar(40),
in limite int(11)
)

BEGIN
    select * from tb_post where
        (   case when cat is null or cat = '' then categoria is not null
            else categoria = cat end) and
        (   case when limite > 0 or limite <> '' then limit limite end )
END

Resumindo, a procedure retorna todas as postagens e se for definido uma categoria, ela traz todos as postagens daquela categoria.

O problema está no limite, não sei porque não consigo colocar dentro do case o termo 'limit', ele da erro de sintaxe.

inserir a descrição da imagem aqui

Se alguém tiver alguma ideia de melhor de como fazer ou como escrever esse comando, agradeceria.

Valeus!

2
  • Cravei que não funcionava sem olhar o código com calma, desculpe. Pretendo remover a minha resposta, pode aceitar a sua mesmo depois, ou a de alguém que fornecer a resposta correta. Não consigo apagar com ela aceita.
    – Piovezan
    Commented 16/05/2018 às 0:16
  • Mas sua resposta me fez pensar além... Sou novato no mundo da programação e as vezes preciso desses gatilhos para resolver certos problemas. Mesmo assim muito obrigado. Commented 16/05/2018 às 0:20

1 Resposta 1

1

Resolvi da seguinte forma:

Criei uma variável e fiz uma condição que de acordo com o resultado que vier do parâmetro ele atribui um certo valor para variável e então uso ela na hora de determinar o limite.

CREATE DEFINER=`root`@`localhost` PROCEDURE `consultarPostagens`(
in cat varchar(40),
in limite int(11)
)

BEGIN
    declare v_limite int;

    if limite > 0 or limite <> '' then
        set v_limite = limite;
    else
        set v_limite = 10000;
    end if;

    select * from tb_post where
        (   case when cat is null or cat = '' then categoria is not null
            else categoria = cat end) and
        (   case when limite > 0 or limite <> '' then limit limite end )
    limit v_limite;
END

Referência sobre variáveis: https://www.devmedia.com.br/variaveis-com-sql-declare-e-select-into/6181

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .