MySQL Forums
Forum List  »  Stored Procedures

error code 1054 occurs sometimes when I run a stored procs
Posted by: roger antonio
Date: March 16, 2012 08:48AM

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.

Options: ReplyQuote


Subject
Views
Written By
Posted
error code 1054 occurs sometimes when I run a stored procs
2683
March 16, 2012 08:48AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.