set Enum field to null in Procedure

Asked

Viewed 69 times

2

I have a precedent that I receive some data and these may come empty up there all right, but when the field is Enum and I try to set as null gives data truncated error for column even the field can receive null.

Example:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `fichacadastral_u`(
p_id_efetivo int(11) ,
p_origem_cert_reservista enum('Aeronáutica','Exército','Marinha')
)
BEGIN


        update _rh.efetivo
            set 
            origem_cert_reservista = if(p_origem_cert_reservista <> '', p_origem_cert_reservista, null)
            where id_efetivo = p_id_efetivo;
            
    
        select 'Cadastro efetuado com sucesso.' as msg, 0 as erro;

END

if I do a simple query type

update _rh.efetivo set origem_cert_reservista = null where id_efetivo = 4;

cool.

could help me?

2 answers

0

Here’s an example of how to use and the code I developed here.

-- Criando a procedure
delimiter $$
CREATE PROCEDURE `insere_enum_null`(
  IN `id` INT(11) UNSIGNED, 
  IN `situacao_nova` ENUM('Cancelado','Ativo','Inativo','Teste')
)
COMMENT 'fazendo o teste passando null para o enum da procedure'
BEGIN

update situacoes 
set situacao = if(situacao_nova <> '', situacao_nova, null)
where id_situacao = id;
            
select 'Cadastro efetuado com sucesso.' as msg, 0 as erro;

END$$
delimiter ;

-- Tabela de situações 

CREATE table if not exists `situacoes` (
  `id_situacao` int(11) UNSIGNED NOT NULL,
  `situacao` enum('Cancelado','Ativo','Inativo','Teste') DEFAULT NULL COMMENT 'contém as situações possíveis'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Tabela usada para teste de procedure insere_enum_null';

-- Inserindo dados na tabela `situacoes`

INSERT INTO `situacoes` (`id_situacao`, `situacao`) VALUES
(1, 'Ativo'),
(2, NULL);

Now calling the data for comparisons

select * from situacoes;

call insere_enum_null(1,'Cancelado');

select * from situacoes;

call insere_enum_null(1, null);

select * from situacoes;

If you want you can view it online here: https://www.db-fiddle.com/f/v8S5ENuugifFRUKWf6Z9iP/0

  • I appreciate your help but this way when comes empty or zero gives truncate date error I found a solution and I will put the answer here

  • Understood then it is much simpler, just do the check using if, ifnull etc.

0

found the solution, put the field I will receive the Enum as int and send 0 in case of empty ai Seto as null

CREATE DEFINER=`root`@`localhost` PROCEDURE `fichacadastral_u`(
p_id_efetivo int(11) ,
p_origem_cert_reservista int(1)
)
BEGIN


        update _rh.efetivo
            set 
            origem_cert_reservista = if(p_origem_cert_reservista > 0, p_origem_cert_reservista, null)
            where id_efetivo = p_id_efetivo;
            
    
        select 'Cadastro efetuado com sucesso.' as msg, 0 as erro;

END

Browser other questions tagged

You are not signed in. Login or sign up in order to post.