Converter Codigo SQL SERVER para MySQL


#1

Olá Pessoal!
Eu sou novo em desenvolvimento de Procedures no MySQL e tenho encontrado serias dificuldades em converter codigos de SQL SERVER para MySQL. Aqui segue-se um trecho de um bloco de codigo de uma procedure e acontece que dá um erro de sintaxe e não reconhece algumas palavras reservadas:

SQL SERVER:

create proc [spMostrar_Pessoa]
@RegistrosPorPagina int,
@NumeroPagina int
as
begin
set nocount on
SELECT *FROM [dbo].[pessoal] order by [id_patente]
OFFSET (@NumeroPagina -1) * @RegistrosPorPagina rows
fetch next @RegistrosPorPagina rows only
end;

Mysql:

CREATE PROCEDURE spMostrar_Pessoa(
IN RegistrosPorPagina INT(11),
IN NumeroPagina INT(11) )
BEGIN
SET NOCOUNT ON
SELECT *FROM tb_pessoa ORDER BY Cod_Pessoa OFFSET (NumeroPagina -1) * RegistrosPorPagina ROWS FETCH NEXT RegistrosPorPagina ROWS ONLY
END

No MySQL: Dá o seguinte erro - you have an error in your sql syntax; check the manual that corresponds mysql server version right syntax use near 'ON
SELECT *FROM tb_pessoa ORDER BY Cod_Pessoa OFFSET (NumeroPagina -1) * Regis at line 5


#2

Ola,Parece ter um erro de sintaxe nessa linha , está faltando a palavra chave LIMIT que é o o número de registros que ele deve consultar depois é que vem o OFFSET.


#3

Karson muito obrigado pela ajuda.
Acontece que esta palavra chave LIMIT e informa o seguinte: Undeclared variable: OFFSET


#4

SELECT *FROM tb_pessoa ORDER BY Cod_Pessoa LIMIT RegistrosPorPagina OFFSET NumeroPagina

Podes seguir esse exemplo


#5

Karson agora o erro mudou para outra instrução :1064- you have an error in your sql syntax; check the manual that corresponds mysql server version right syntax use near '(NumeroPagina -1) * RegistroPorPagina ROW FETCH NEXT RegistroPorPagina ROW
END’
Sou muito grato pela paciência e ajuda.


#6

De nada, mas melhor é veres o manual oficial do Mysql para te actualizares Mysql em termos da sintaxe , porque tem algumas diferenças com o Mssql


#7

Olá @PedroJoseGomes

Para converter o seu código SQL (MSSQL) para SQL (MySQL), teria feito mais ou menos o seguinte:

delimiter //

CREATE PROCEDURE spMostrar_Pessoa (p_RegistosPorPagina INT, p_NumeroPagina INT)
BEGIN
    SELECT * FROM pessoal ORDER BY id_patente LIMIT (p_NumeroPagina * RegistosPorPagina),p_RegistosPorPagina;
END//

delimiter ;

Ou

delimiter //

CREATE PROCEDURE spMostrar_Pessoa (p_RegistosPorPagina INT, p_NumeroPagina INT)
BEGIN
    SELECT * FROM pessoal ORDER BY id_patente LIMIT (p_NumeroPagina * RegistosPorPagina) OFFSET p_RegistosPorPagina;
END//

delimiter ;

Testa aí e diz se funciona


#8

Boas @psantos e muito obrigado pela paciência. E ja testei e dá o mesmo erro de sintaxe:
(p_NumeroPagina * RegistosPorPagina) OFFSET p_RegistosPorPagina;
END

Gostaria imenso de perceber porque. Não esta correcto a sintaxe.