Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rcast

construção dinamica de busca

Recommended Posts

Eai pessoal, continuo tentando passar as minhas SPS de SQL Server pra Mysql, mas ta complicado, cada hora é um erro...

 

o código é essa

 

----------------------------------------------------------------------------------------------------------

 

DROP PROCEDURE IF EXISTS SelMembro;

CREATE PROCEDURE SelMembro

(

IN v_nome VARCHAR(40),

IN v_documento varchar(20),

IN v_sexo char(1),

IN v_endereco varchar(60),

IN v_cidade varchar(30),

IN v_estado char(2),

IN v_tel_1 varchar(10),

IN v_tel_2 varchar(10),

IN v_login_email varchar(40),

IN v_senha varchar(24),

IN v_codigoconfirma tinyint(4),

IN v_confirmado tinyint(1),

IN v_data_nasc date,

IN v_tipoconta tinyint(3),

IN v_data_cadastro varchar(10),

IN v_ultimo_acesso varchar(10)

)

 

SET @v_nome = v_nome ,

@v_documento = v_documento ,

@v_sexo = v_sexo,

@v_endereco = v_endereco,

@v_cidade = v_cidade,

@v_estado = v_estado,

@v_tel_1 = v_tel_1,

@v_tel_2 = v_tel_2,

@v_login_email = v_login_email,

@v_senha = v_senha,

@v_codigoconfirma = v_codigoconfirma,

@v_confirmado = v_confirmado,

@v_data_nasc = v_data_nasc,

@v_tipoconta = v_tipoconta,

@v_data_cadastro = v_data_cadastro,

@v_ultimo_acesso = v_ultimo_acesso;

 

SET @sql = 'SELECT * FROM database.tabela WHERE 1 = 1 ';

 

IF @v_nome IS NOT NULL THEN

SET @sql = @sql + ' AND C01_nome = ' + v_nome;

END IF;

IF @v_documento IS NOT NULL THEN

SET @sql = @sql + ' AND C01_documento = ' v_documento);

END IF;

.....

.....

....

....

 

 

EXECUTE(@sql)

PRINT(@sql)

---------------------------------------------------------------------------------------------------------

 

Acontece erro de sintaxe nas linhas em negrito.. Será alguma coisa com o escopo das variáveis? Ja verifiquei a sintaxe do IF mil vezes, ja mudei pra != '' e <> ''

Alguem poderia me dar uma luz? Ja procurei por tudo e não consigo fazer isso funcionar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi.

bom... o erro que deu aqui (copiei sua procedure) foi nesta linha:

SET @sql = @sql + ' AND C01_documento = ' v_documento);

parece que na concatenação faltou o sinal de + entre o texto e a variável v_documento, e parece que está fechando parentese mas não abriu...

SET @sql = @sql + ' AND C01_documento = ' + v_documento;

corrigindo isto, pelo menos aqui, criou a procedure na boa...

 

você pode concatenar utilizando CONCAT também...

SET @sql = CONCAT(@sql,' AND C01_documento = ',v_documento);

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu cassitos, baxei o programa e consegui resolver o problema com os IFs.. muito bom o programa por sinal, bem leve e simples.

agora aconteceu outro problema.. pelo que eu andei pesquisando o mysql não tem uma função pra executar um comando.. igual o EXECUTE(comando_string) do sql server certo?

Como eu faço daí? crio um parametro de saída da procedure? To perdido ae..

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum... confesso que não sei absolutamente nada de SQL Server.

Que tipo de comando deveria ser executado? Talvez tenha alternativa.

Você quer executar uma outra procedure dentro de uma e retornar alguns valores desta procedure executada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu cassitos, dei uma lida no manual e esclareceu bem as ideias.. acho que falta pouco agora:

 

O código atual é esse e tá dando um erro mto estranho onde tá em negrito la no final:

 

------------------------------------------------------------------------

 

DELIMITER $$

DROP PROCEDURE IF EXISTS database.SelMembro $$

CREATE PROCEDURE `database`.`SelMembro`

(

IN v_nome VARCHAR(40),

IN v_documento varchar(20),

IN v_sexo char(1),

IN v_endereco varchar(60),

IN v_cidade varchar(30),

IN v_estado char(2),

IN v_tel_1 varchar(10),

IN v_tel_2 varchar(10),

IN v_login_email varchar(40),

IN v_senha varchar(24),

IN v_codigoconfirma tinyint(4),

IN v_confirmado tinyint(1),

IN v_data_nasc date,

IN v_tipoconta tinyint(3),

IN v_data_cadastro varchar(10),

IN v_ultimo_acesso varchar(10)

)

 

BEGIN

SET @sql = 'SELECT * FROM database.tabela WHERE 1 = 1 ';

 

IF v_nome IS NOT NULL THEN

SET @sql = @sql + ' AND C01_nome = ' + v_nome;

IF v_documento IS NOT NULL THEN

SET @sql = @sql + ' AND C01_documento = ' + v_documento;

IF v_sexo IS NOT NULL THEN

SET @sql = @sql + ' AND C01_sexo = ' + v_sexo;

IF v_endereco IS NOT NULL THEN

SET @sql = @sql + ' AND C01_endereco = ' + v_endereco;

IF v_cidade IS NOT NULL THEN

SET @sql = @sql + ' AND C01_cidade = ' + v_cidade;

IF v_estado IS NOT NULL THEN

SET @sql = @sql + ' AND C01_estado = ' + v_estado;

IF v_tel_1 IS NOT NULL THEN

SET @sql = @sql + ' AND C01_tel_1 = ' + v_tel_1;

IF v_tel_2 IS NOT NULL THEN

SET @sql = @sql + ' AND C01_tel_2 = ' + v_tel_2;

IF v_login_email IS NOT NULL THEN

SET @sql = @sql + ' AND C01_login_email = ' + v_login_email;

IF v_senha IS NOT NULL THEN

SET @sql = @sql + ' AND C01_senha = ' + v_senha;

IF v_codigoconfirma IS NOT NULL THEN

SET @sql = @sql + ' AND C01_codigoconfirma = ' + v_codigoconfirma;

IF v_confirmado IS NOT NULL THEN

SET @sql = @sql + ' AND C01_confirmado = ' + v_confirmado;

IF v_data_nasc IS NOT NULL THEN

SET @sql = @sql + ' AND C01_data_nasc = ' + v_data_nasc;

IF v_tipoconta IS NOT NULL THEN

SET @sql = @sql + ' AND C01_tipo_conta = ' + v_tipoconta;

IF v_data_cadastro IS NOT NULL THEN

SET @sql = @sql + ' AND C01_data_cadastro = ' + v_data_cadastro;

IF v_ultimo_acesso IS NOT NULL THEN

SET @sql = @sql + ' AND C01_ultimo_acesso = ' + v_ultimo_acesso;

 

PREPARE stmt1 FROM @sql;

EXECUTE stmt1;

DROP PREPARE stmt1;

END$$

DELIMITER ;

 

---------------------------------------------------

O erro que ta dando é esse:

 

Error Code : 1064

Voc� tem um erro de sintaxe no seu SQL pr�ximo a '' na linha 57

(0 ms taken)

 

(a linha 57 é a linha em negrito)

---------------------------------------------------------------------

 

O estranho é que mesmo quando eu tiro as 3 linhas de preparação, execução e drop da preparação ele continua dando erro, verifiquei e to fechando certinho o BEGIN.

Tem alguma idéia ae cassitos?

To quase lá hehe.. agradeço desde já pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá!

só faltou pôr o END IF; para cada IF que foi iniciado.

ex:

IF v_nome IS NOT NULL THEN

SET @sql = @sql + ' AND C01_nome = ' + v_nome;

END IF;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.