Rcast 0 Denunciar post Postado Agosto 22, 2008 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
cassitos 2 Denunciar post Postado Agosto 23, 2008 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
Rcast 0 Denunciar post Postado Agosto 23, 2008 você usou aquele mysql query builder ou algo assim? testei o mesmo código no phpMyadmin e dá pau.. :/ Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Agosto 23, 2008 cara... utilizei SQLYOGhttp://www.webyog.com/en/download_form.php...2FSQLyog702.exe. pode ser que tenha alguma versão nova do PhpMyAdmin, mas pelo que vi alguns posts por aí o pessoal não tem conseguido criar procedures... Compartilhar este post Link para o post Compartilhar em outros sites
Rcast 0 Denunciar post Postado Agosto 25, 2008 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
cassitos 2 Denunciar post Postado Agosto 25, 2008 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
Rcast 0 Denunciar post Postado Agosto 25, 2008 eu quero executar o comando que está dentro da variável @sql, a query que foi construida dinamicamente. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Agosto 25, 2008 dá uma lida neste manual, deve ser o que está precisando: http://dev.mysql.com/doc/refman/5.0/en/sql...statements.html Compartilhar este post Link para o post Compartilhar em outros sites
Rcast 0 Denunciar post Postado Agosto 26, 2008 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
cassitos 2 Denunciar post Postado Agosto 26, 2008 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
Rcast 0 Denunciar post Postado Agosto 27, 2008 deu certo! valeu cassitos!! Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Agosto 27, 2008 beleza http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites