drop database if exists crash_test; create database crash_test default character set utf8 collate utf8_unicode_ci; use crash_test; DELIMITER $$ CREATE TABLE `financeiro_afinidades` ( `id` int(11) NOT NULL , `codigo` varchar(15) NOT NULL, `descricao` varchar(100) NOT NULL, `desconto` double NOT NULL, `multa` double NOT NULL, `juros` double NOT NULL, `diasvencimento` int(11) NOT NULL, `modalidade` tinyint(4) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `financeiro_afinidades_descricao_UNIQUE` (`descricao`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 $$ insert into financeiro_afinidades values(1,'', '', 1,1,1,2,0) $$ CREATE TABLE `financeiro_receber` ( `id` int(11) NOT NULL , `vencimento` date DEFAULT NULL, `valor` double NOT NULL, `id_afinidade` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `financeiro_receber_financeiro_afinidades_idx` (`id_afinidade`), CONSTRAINT `financeiro_receber_financeiro_afinidades` FOREIGN KEY (`id_afinidade`) REFERENCES `financeiro_afinidades` (`id`) ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8 $$ insert into financeiro_receber values(1, curdate(), 1, 1) $$ CREATE TABLE `financeiro_bancos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sigla` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `descricao` varchar(200) COLLATE utf8_unicode_ci NOT NULL, `codigo` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci $$ insert into financeiro_bancos values(1, '', 'Bank 1', 10) $$ CREATE TABLE `financeiro_contas` ( `id` int(11) NOT NULL AUTO_INCREMENT, `codigo` varchar(15) NOT NULL, `descricao` varchar(100) NOT NULL, `id_banco` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `financeiro_contas_descricao_UNIQUE` (`descricao`), KEY `financeiro_contas_financeiro_bancos_idx` (`id_banco`), CONSTRAINT `financeiro_contas_financeiro_bancos` FOREIGN KEY (`id_banco`) REFERENCES `financeiro_bancos` (`id`) ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 $$ insert into financeiro_contas values(1,'','Account',1) $$ CREATE TABLE `financeiro_cobrancasreceber` ( `id` int(11) NOT NULL, `id_receber` int(11) NOT NULL, `id_conta` int(11) NOT NULL, `data` datetime NOT NULL, PRIMARY KEY (`id`), KEY `financeiro_cobrancasreceber_financeiro_receber_idx` (`id_receber`), KEY `financeiro_cobrancasreceber_financeiro_contas_idx` (`id_conta`), CONSTRAINT `financeiro_cobrancasreceber_financeiro_contas` FOREIGN KEY (`id_conta`) REFERENCES `financeiro_contas` (`id`) ON UPDATE NO ACTION, CONSTRAINT `financeiro_cobrancasreceber_financeiro_receber` FOREIGN KEY (`id_receber`) REFERENCES `financeiro_receber` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci $$ insert into financeiro_cobrancasreceber values(1,1,1,curdate()) $$ CREATE TABLE `integracaobancaria_dadosboletoreceber` ( `id_cobrancareceber` int(11) NOT NULL, `lote` int(11) DEFAULT NULL, `nossonumero` int(11) NOT NULL, `ocorrencia` varchar(50) CHARACTER SET utf8 NOT NULL, `campolivre` char(25) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id_cobrancareceber`), CONSTRAINT `integracaobancaria_dadosboletoreceber_financeiro_cobrancareceber` FOREIGN KEY (`id_cobrancareceber`) REFERENCES `financeiro_cobrancasreceber` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci $$ insert into integracaobancaria_dadosboletoreceber values(1,null, 1, '01', '0123456789012345678901234') $$ create OR REPLACE view financeiro_vwreceber as select r.id, 500 as saldo, if((select saldo)>0 ,if(r.vencimento>=curdate(),(r.valor*af.desconto)/100,0), 0) as vlrdesconto, if((select saldo)>0 ,if(r.vencimento<(curdate()-af.diasvencimento),(r.valor*af.multa)/100,0),0) as vlrmulta, if((select saldo)>0 ,if(r.vencimento<(curdate()-af.diasvencimento), round(r.valor*0,2),0),0) as vlrjuros, r.valor-(select vlrdesconto)+(select vlrmulta)+(select vlrjuros) as valortotal, abs(r.valor-coalesce(0,0))<0.001 as liquidado from financeiro_receber r join financeiro_afinidades af on af.id=r.id_afinidade $$ create function integracaobancaria_constroicodigobarras(_idCobranca int) returns char(44) reads sql data begin declare _campolivre int; select 1 into _campolivre from integracaobancaria_dadosboletoreceber dbr join financeiro_cobrancasreceber cr on cr.id=dbr.id_cobrancareceber join financeiro_contas conta on conta.id=cr.id_conta join financeiro_bancos banco on banco.id=conta.id_banco join financeiro_vwreceber j on j.id=cr.id_receber where dbr.id_cobrancareceber=_idCobranca limit 1; return convert(_campolivre, char); end$$ create function integracaobancaria_constroilinhadigitavel (_idCobranca int) returns char(58) reads sql data begin declare _codbarras char(44); set _codbarras=integracaobancaria_constroicodigobarras(_idCobranca); return _codbarras; end$$ delimiter ; select integracaobancaria_constroicodigobarras(1); -- this will crash. select integracaobancaria_constroicodigobarras(1);