Ir para conteúdo
Fórum Script Brasil
  • 0

SQL- FUNCTION COM VARIAVEIS E IF ELSEIF


José Luiz Tanoeiro

Pergunta

criei uma function só que quando mando gravar me retorna "Invalid Stores Procedure Sybtax"

segue abaixo

DELIMITER //
CREATE DEFINER=`root`@`localhost` FUNCTION `classi_res`(P1 INT(11),P2 INT(11), RES CHAR(1)) RETURNS char(1) CHARSET utf8mb4
BEGIN
    #Routine body goes here...
    DECLARE P1 INT, P2 INT;
    
SET P1= (SELECT P1 FROM tab_sub07);
SET P2 = (SELECT P2 FROM tab_sub07);

IF P1 > P2 THEN 
        BEGIN
            UPDATE tab_sub07 SET RES = 'v';
        END;
    ELSEIF P1<P2
    BEGIN
            UPDATE tab_sub07 SET RES = 'd';
    END;
    ELSE
        BEGIN    
            UPDATE tab_sub07 SET RES = 'e';
            END;
    END IF;

    RETURN 0;
END
//

para atualizar essa tabela campos "RES"

 

image.png

telaclassi.png

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 1
Em 09/11/2022 em 13:46, Frank K Hosaka disse:

É como eu disse, eu não sou bom nessa área,

eu mudei a função para

CREATE DEFINER=`root`@`localhost` 
FUNCTION `classi_res`(P1 int, P2 int) 
RETURNS varchar(1) CHARSET utf8mb3 COLLATE utf8_swedish_ci
    DETERMINISTIC
BEGIN
    IF P1 > P2 THEN RETURN 'v';
    ELSEIF P1 < P2 THEN RETURN 'd';
    ELSEIF P1 = P2 THEN RETURN 'e';
    END IF;
END

Para testar a função, eu executei esse comando:
FUNCIONOU OBRIGADO

 

update tab_sub07 set RES=classi_res(P1,P2)

O resultado deu certo, mas eu recebi a advertência de que estou usando um character set deprecated. Isso eu ainda não sei como resolver.

 

Em 09/11/2022 em 11:46, José Luiz Tanoeiro disse:

não deu certo retornou o mesmo erro

 

EU FIZ ESSA:

update tab_sub07 set RES = IF(P1>P2,'V',if(P1<P2,'D','E'));

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não sou bom com functions e procedures do MySQL. Eu usei o método da tentativa e erro até criar a função no painel dos objetos, assim:

 

DELIMITER //
CREATE FUNCTION classi_res (P1 INT,P2 INT, RES CHAR(1)) 
RETURNS char(1) CHARSET utf8mb4
DETERMINISTIC
BEGIN
SET P1= (SELECT P1 FROM tab_sub07);
SET P2 = (SELECT P2 FROM tab_sub07);
IF P1 > P2 THEN UPDATE tab_sub07 SET RES = 'v';
	ELSEIF P1 < P2 THEN UPDATE tab_sub07 SET RES = 'd';
	ELSEIF P1 = P2 THEN UPDATE tab_sub07 SET RES = 'e';    
END IF;
RETURN (0);
END//
DELIMITER ;

Pelo que eu vi no Google, a função é utilizada dentro de um select. Boa sorte.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
58 minutos atrás, Frank K Hosaka disse:

Eu não sou bom com functions e procedures do MySQL. Eu usei o método da tentativa e erro até criar a função no painel dos objetos, assim:

 

DELIMITER //
CREATE FUNCTION classi_res (P1 INT,P2 INT, RES CHAR(1)) 
RETURNS char(1) CHARSET utf8mb4
DETERMINISTIC
BEGIN
SET P1= (SELECT P1 FROM tab_sub07);
SET P2 = (SELECT P2 FROM tab_sub07);
IF P1 > P2 THEN UPDATE tab_sub07 SET RES = 'v';
	ELSEIF P1 < P2 THEN UPDATE tab_sub07 SET RES = 'd';
	ELSEIF P1 = P2 THEN UPDATE tab_sub07 SET RES = 'e';    
END IF;
RETURN (0);
END//
DELIMITER ;

Pelo que eu vi no Google, a função é utilizada dentro de um select. Boa sorte.

não deu certo retornou o mesmo erro

 

Link para o comentário
Compartilhar em outros sites

  • 0

É como eu disse, eu não sou bom nessa área,

eu mudei a função para

CREATE DEFINER=`root`@`localhost` 
FUNCTION `classi_res`(P1 int, P2 int) 
RETURNS varchar(1) CHARSET utf8mb3 COLLATE utf8_swedish_ci
    DETERMINISTIC
BEGIN
    IF P1 > P2 THEN RETURN 'v';
    ELSEIF P1 < P2 THEN RETURN 'd';
    ELSEIF P1 = P2 THEN RETURN 'e';
    END IF;
END

Para testar a função, eu executei esse comando:
 

update tab_sub07 set RES=classi_res(P1,P2)

O resultado deu certo, mas eu recebi a advertência de que estou usando um character set deprecated. Isso eu ainda não sei como resolver.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...