Fução Mysql = Split, Fução Cache= Split

0 respostas
MarceloNeo

Help,
Preciso cria uma função na verdade em Cache, mas nem estou conseguindo fazer no Mysql.
peço ajuda de para poder criar no MYSQL e se alguém souber no Banco de dados Cache ficarei muito grato pelas dicas.

Problema tem se uma String strSplit="30;60;90"; deseja se fazer a soma desses valores através de funções SQL não disponho de outros recursos.

Vou colocar ela em Java, os scripts de SQL para MYSQL que tenho.

Código se fosse em Java
//Metodo em Java
/**
 * @param: String  com dados dessa forma  strSplit="30;60;90";
* @param: String  com dados separador  sp=";";
* */
	
public double somaSplit(String strSplit, String sp)
{
		strSplit="30;60;90";  // só para exemplificar.
		String split[]= strSplit.split(sp);
		Integer soma=0;
		int i=1;
		for(String str : split)
		{
			soma+=Integer.parseInt(str);
			i++;
		}
		if(soma % i!=0)
		{
			return soma/i+1;
		}
		return soma/i;
}
Agora vou colocar o Script Mysql para a tabela e os dados e a função que estou fazendo...
// criando a tabela para teste
create table testeFuncao(
 stringSplit varchar(100)
)

//Inserindo os dados na tabela
insert into testeFuncao (stringSplit) values ('30;60;90;120'),('10;20;30;40'),('30;60;'),('60;90;'),('30;60;90;120');

//função em MYSQL que estou fazendo..
DELIMITER $$

DROP FUNCTION IF EXISTS `baseparatestes`.`somaString` $$
CREATE FUNCTION `baseparatestes`.`somaString` (strSplit VARCHAR(100), strDelimitador VARCHAR(5) ) RETURNS INT
BEGIN
     DECLARE  qtdeDelimitadores, i, tamanhoSplit, tamanhoDelimitador INT;
     DECLARE  caracter VARCHAR;
     DECLARE  soma DOUBLE;

     SET soma=0;
     SET i=0;

     IF ISNULL(strSplit) THEN RETURN i; END IF;
     IF ISNULL(strDelimitador) THEN RETURN i; END IF;

     SET tamanhoSplit = CHAR_LENGTH( strSplit );
     SET tamanhoDelimitador = CHAR_LENGTH( strDelimitador );

     IF (tamanhoSplit = 0 OR tamanhoDelimitador = 0)  THEN RETURN 0;  END IF;

     FOR(i; i < tamanhoSplit; i++ )
     {
       SET  caracter =strSplit[i];
       IF caracter = strDelimitador THEN qtdeDelimitadores++; END IF

     }

     SET i=0;
     FOR(i=0; i< qtdeDelimitadores; i++)
     {
      varchar valor = SUBSTRING(SUBSTRING_INDEX(strSplit, strDelimitador, i), LENGTH(SUBSTRING_INDEX(strSplit, strDelimitador, i)) + 1);
      soma += cast (valor as double);

     }
     IF soma % qtdeDelimitadores != 0 THEN RETURN CAST (soma / qtdeDelimitadores AS INT)+1; END IF;
     RETURN CAST (soma / qtdeDelimitadores AS INT);

END $$

DELIMITER ;
Ta dando esse erro! Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; DECLARE soma DOUBLE;

SET soma=0;
SET i=0;

IF ISNU' at line 4

Alguém pode me ajudar!

Criado 10 de março de 2011
Respostas 0
Participantes 1