error code 1054 occurs sometimes when I run a stored procs
Hello
I created a stored procs with the error code 1054 error sometimes, for example I run it now and presents the error, but I can run it after ten minutes and the error does not occur, the environment is the same in all tests.
The error is always generated the form below.
Error Code: 1054
Unknown column 'M_MATRICULA.. / Test / t_vendedores_renovar.MYD.' in 'field list'
But when I run and I run right and again and again only wrong what is between '..' changes.
example:
Unknown column 'M_MATRICULA.. / Test / t_vendedores_renovar.MYD.' in 'field list'
Unknown column 'M_MATRICULA.MYD.' in 'field list'
please help me.
my stored proc
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `sp_senha_ura_afr`$$
CREATE PROCEDURE `sp_senha_ura_afr`(V_COD_UNNEGOCIO INT(6))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE codProfissional INT(11);
DECLARE codVendedor VARCHAR(5);
DECLARE matricula INT(11);
DECLARE senhaURAOld VARCHAR(6);
DECLARE nome VARCHAR(50);
DECLARE email VARCHAR(50);
DECLARE senhaURA VARCHAR(6);
DECLARE codAgenteVenda VARCHAR(4);
DECLARE funcionalidade VARCHAR(40);
DECLARE qtdRenovados INT(10);
DECLARE codUnnegocio INT(10);
DECLARE contador INT(10);
DECLARE objSenhaUra CURSOR FOR
SELECT * FROM test.t_vendedores_renovar WHERE COD_UNNEGOCIO = V_COD_UNNEGOCIO;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
##Cria valor para iniciar o contadorador das senhas uras que serão renovadas.
SET contador = 0;
##Criado um count para definir qual a quantidade de senhas uras que serão renovadas
SELECT COUNT(COD_PROFISSIONAL) qtdRenovados FROM test.t_vendedores_renovar WHERE COD_UNNEGOCIO = V_COD_UNNEGOCIO INTO qtdRenovados;
## tabela com TODAS senhas disponíveis (substituir a procedure sp_gera_senha_ura)
DROP TABLE IF EXISTS test.t_nova_senha;
CREATE TABLE test.`t_nova_senha` (
`DSC_SENHA_URA` MEDIUMTEXT CHARACTER SET latin1 COLLATE latin1_general_ci
) ENGINE=MYISAM DEFAULT CHARSET=latin1 ;
SET @countLoop = 0;
WHILE (@countLoop < qtdRenovados + 300) DO
INSERT INTO test.t_nova_senha
SELECT CONCAT(
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9"),
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9"),
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9"),
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9"),
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9"),
ELT(FLOOR(1 + (RAND() * (10-1))), "0","1","2","3","4","5","6","7","8","9")) ;
SET @countLoop = @countLoop + 1;
END WHILE;
## Criar aa lista de senhas_existentes em outras revendas, pois uma revenda não pode possuir dois vendedores com a mesma senha.
DROP TABLE IF EXISTS test.t_senhas_existentes;
CREATE TABLE test.t_senhas_existentes AS
SELECT * FROM (
SELECT DISTINCT PROF.DSC_SENHA_URA, AV.COD_AGENTE_VENDA
FROM iwprd_hem_backup.agente_venda AV
INNER JOIN iwprd_hem_backup.profissional PROF ON PROF.COD_AGENTE_COMPL = AV.COD_AGENTE_VENDA
INNER JOIN test.t_vendedores_renovar PUB ON PUB.COD_AGENTE_VENDA = AV.COD_AGENTE_VENDA
WHERE AV.IND_STA_AGENTE = 1 AND PROF.DSC_SENHA_URA IS NOT NULL
UNION ALL
SELECT DISTINCT PROF.DSC_SENHA_URA, AV.COD_AGENTE_VENDA
FROM iwprd_hem_backup.agente_venda AV
INNER JOIN iwprd_hem_backup.agente_posicao AP ON AP.COD_AGENTE_VENDA = AV.COD_AGENTE_VENDA AND AV.IND_STA_AGENTE = 1
INNER JOIN iwprd_hem_backup.profissional_posicao PP ON PP.COD_POSICAO_PAI = AP.COD_POSICAO AND PP.DAT_DESATIVACAO IS NULL
INNER JOIN iwprd_hem_backup.profissional PROF ON PROF.COD_PROFISSIONAL = PP.COD_PROFISSIONAL AND PROF.DSC_SENHA_URA IS NOT NULL
INNER JOIN test.t_vendedores_renovar PUB ON PUB.COD_AGENTE_VENDA = AV.COD_AGENTE_VENDA) a;
/** **/
ALTER TABLE test.t_senhas_existentes ADD INDEX snp99 (COD_AGENTE_VENDA);
OPEN objSenhaUra;
REPEAT
FETCH objSenhaUra INTO codProfissional , matricula, senhaURAOld, nome , email, codAgenteVenda, funcionalidade, codVendedor, codUnnegocio;
IF NOT done THEN
#Incrementa para o contadorador do repeat
SET contador = contador + 1;
SELECT * FROM (SELECT ( SELECT MIN(U.DSC_SENHA_URA)
FROM test.t_nova_senha U
WHERE U.dsc_senha_ura NOT IN (SELECT dsc_senha_ura
FROM test.t_senhas_existentes R
WHERE R.COD_AGENTE_VENDA = P.COD_AGENTE_VENDA)) AS DSC_SENHA_URA
FROM test.t_vendedores_renovar P
WHERE P.COD_PROFISSIONAL = codProfissional)a
GROUP BY a.DSC_SENHA_URA INTO @senhaURA;
# MARCAR O VENDEDOR COM A NOVA SENHA
UPDATE test.t_vendedores_renovar SET dsc_senha_ura = @senhaURA WHERE COD_PROFISSIONAL = codProfissional;
# EXCLUIR A SENHA DA LISTA DE SENHAS DISPONÍVEIS
DELETE FROM test.t_nova_senha WHERE dsc_senha_ura = @senhaURA;
END IF;
UNTIL qtdRenovados = contador END REPEAT;
CLOSE objSenhaUra;
END$$
DELIMITER ;
Edited 1 time(s). Last edit at 03/16/2012 08:49AM by roger antonio.