Jump to content
bruno.291193

Criação de procedure com parâmetros NOT NULL

Recommended Posts

Olá,

 

Estou com a seguinte dúvida:

 

Na criação de minha procedure, os parâmetros de Data Inicial e Final não podem vir nulos. Eu criei a verificação abaixo para isso:

" IF @DT_INICIAL AND @DT_FINAL IS NULL BEGIN RAISERROR('ERRO = DATA INICIAL E FINAL NAO INFORMADAS.',1,1) END; "

Porém, ao meu ver, é uma verificação desnecessária, ou seja, se eu criar os parâmetros @DT_INICIAL e @DT_FINAL como NOT NULL, o próprio SQL irá retornar o erro dizendo que o parâmetro é obrigatório.

 

Mas, não sei como realizar a criação desses parâmetros como NOT NULL, ao realizar o código abaixo, o SQL retorna o erro (também abaixo):

(

DECLARE @DT_INICIAL DATE NOT NULL,

DECLARE @DT_FINAL DATE NOT NULL

)

Retorno do SQL:

Msg 11555, Level 15, State 1, Procedure PRC_MTCORP_MODU_ABAS_BOBI_QUAL_CONS, Line 29
O parâmetro '@DATA_INICIAL' foi declarado como NOT NULL. Os parâmetros NOT NULL têm suporte apenas com procedimentos armazenados compilados de forma nativa.

 

Pergunta:

Existe meios de se criar o parâmetro como NOT NULL?

 

Detalhe:

Criando o parâmetro sem nenhuma informação, ou seja, DECLARE "@DT_INICIAL DATE", na execução o SQL aceita o parâmetro como NULL, sendo necessária minha verificação inicial.

 

Abraço.

 

Share this post


Link to post
Share on other sites

Quando você cria uma procedure os parametros podem ser obrigatórios ou não

Porém, NULL também é um valor! e neste caso você tem que tratar dentro da procedure.

 

No seu caso, altere o RAISERROR deste modo:

RAISERROR(15600, -1,-1,'ERRO = DATA INICIAL E FINAL NAO INFORMADAS.')

 

Olhe um exemplo:

 



if exists (select 1 from sys.procedures where name = 'teste_data')
drop procedure teste_data 
go


create procedure teste_data (@dt_incio datetime , @dt_fim datetime)

as

begin

if @dt_incio is null or @dt_fim is null
RAISERROR(15600, -1,-1,'ERRO = DATA INICIAL E FINAL NAO INFORMADAS.')


select @dt_incio, @dt_fim

end

 

Mensagem de erro:

image.png.35f6340607bf0918863e021f6db2bc86.png

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mamotinho
      Olá, boa noite! estou em dúvidas e gostaria que alguém me ajudasse, bom eu tenho uma procedure no meu SQL 2017 e dentro da procedure tem if com com return de mensagem , e eu queria exibir essa mensagem após a pessoa executa a função no meu sistema. segue abaixo como está
       


    • By Felipe_N22
      Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
    • By johnklo
      COM BASE NA TABELA HR DO ORACLE
      Preciso criar uma sub-rotina (procedure) que imprima na tela o número de funcionários (employees) agrupados por departamentos (department_id). Deve-se ordenar a saída em ordem decrescente pela quantidade de departamentos. Pode-se utilizar qualquer forma de cursor para imprimir o resultado.
    • By Andinho Luiz
      Boa tarde a todos,
       
      Estou tentando criar uma Procedure no MySQL e tenho esta tabela "Cliente". 
       
      CREATE TABLE IF NOT EXISTS cliente ( id_cliente INT(5) AUTO_INCREMENT PRIMARY KEY, tipo CHAR(1) NOT NULL, rSocialNome VARCHAR(20) NOT NULL, cnpjCPF VARCHAR(30) NOT NULL, ieRG VARCHAR(30), contato VARCHAR(50), email VARCHAR(30), site VARCHAR(30), dataCadastro DATE, usuario VARCHAR(30) )ENGINE=MyISAM; Tenho outra tabela que é a "Endereço"
      CREATE TABLE IF NOT EXISTS `endereco` ( `id_endereco` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `id_cliente` INT(11) NOT NULL, `logradouro` VARCHAR(20) NOT NULL , `rua` VARCHAR(25) NOT NULL , `numero` INT(11) NOT NULL , `complemento` VARCHAR(40) , `bairro` VARCHAR(40) NOT NULL , `cidade` VARCHAR(40) NOT NULL , `estado` VARCHAR(40) NOT NULL , `cep` VARCHAR(9) NOT NULL , PRIMARY KEY (`id_endereco`), constraint fk_endereco_cliente FOREIGN KEY (id_cliente) REFERENCES cliente (id_cliente) ) ENGINE=MyISAM  
      Para fazer o insert nas duas tabelas eu criei uma procedure, podem quando tento adicionar o MySQL da erro "ALERTA: Erro ao inserir na tabela de pessoas"
       
      DELIMITER $$ CREATE DEFINER=`dotinfoc`@`localhost` PROCEDURE `cad_cliente`( IN c_tipo CHAR(1), IN c_rSocialNome VARCHAR(20), IN c_cnpjCPF VARCHAR(30), IN c_ieRG VARCHAR(30), IN c_contato VARCHAR(50), IN c_email VARCHAR(30), IN c_site VARCHAR(30), IN c_logradouro VARCHAR(20), IN c_rua VARCHAR(25), IN c_numero INT(11) , IN c_complemento VARCHAR(40) , IN c_bairro VARCHAR(40), IN c_cidade VARCHAR(40), IN c_estado VARCHAR(40), IN c_cep VARCHAR(9) ) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; START TRANSACTION; INSERT INTO cliente (tipo, rSocialNome, cnpjCPF, ieRG, contato, email, site, dataCadastro, usuario) VALUES (c_tipo, c_rSocialNome, c_cnpjCPF, c_ieRG, c_contato, c_email, c_site); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de pessoas"; ROLLBACK; ELSE SELECT DISTINCT LAST_INSERT_ID() INTO @id_cliente FROM cliente; IF excecao = 1 THEN SET msg = "ALERTA: Erro ao buscar o ultimo ID inserido em clientes"; ROLLBACK; ELSE INSERT INTO endereco(id_cliente, logradouro, rua, numero, complemento, bairro, cidade, estado, cep) values(@id_cliente, c_logradouro, c_rua, c_numero, c_complemento, c_bairro, c_cidade, c_estado, c_cep); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de Endereco"; ROLLBACK; END IF; END IF; END IF; IF excecao <> 1 THEN COMMIT; SET msg = "ALERTA: Registro Incluido com sucesso"; END IF; SELECT msg AS msg; END$$ DELIMITER ;  
       
    • By josePeixoto
      Olá,
       
      quando tento executar a trigger abaixo, ele me retorna 
      Erro(56,16): PLS-00306: wrong number or types of arguments in call to '||'  
      create or replace TRIGGER API_SIM_PF_ATUALIZA_DENTALIS BEFORE INSERT OR UPDATE ON PESSOA_FISICA FOR EACH ROW DECLARE type t_num is table of number; DS_EMAIL_W t_num; TELEFONE_RES_W t_num; TELEFONE_COM_W t_num; ESTADO_CIVIL_W VARCHAR2(255); ENDERECO_RES_W t_num; NUMERO_W t_num; BAIRRO_RES_W t_num; COMPLEMENTO_RES_W t_num; CIDADE_RES_W t_num; CEP_RES_W t_num; ENDERECO_COM_W t_num; NUMERO_COM_W t_num; BAIRRO_COM_W t_num; COMPLEMENTO_COM_W t_num; CIDADE_COM_W t_num; CEP_COM_W t_num; PROFISSIONAL_W VARCHAR2(255); SEXO_W VARCHAR2(255); DT_NASCIMENTO_W t_num; BEGIN SELECT DISTINCT CP.DS_EMAIL, ('('||nr_ddd_telefone||')'||nr_telefone), ('('||nr_ddd_telefone||')'||nr_telefone), (SELECT CP1.DS_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.NR_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_BAIRRO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_COMPLEMENTO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_MUNICIPIO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.CD_CEP FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), TO_CHAR(:NEW.DT_NASCIMENTO,'"YYYY-MM-DD HH24:MI:SS') BULK COLLECT INTO DS_EMAIL_W,TELEFONE_RES_W,TELEFONE_COM_W,ENDERECO_RES_W,NUMERO_W,BAIRRO_RES_W,COMPLEMENTO_RES_W,CIDADE_RES_W,CEP_RES_W,/*ENDERECO_COM_W,NUMERO_COM_W,BAIRRO_COM_W,COMPLEMENTO_COM_W, CIDADE_COM_W,CEP_COM_W,*/DT_NASCIMENTO_W FROM TASY.COMPL_PESSOA_FISICA CP WHERE CP.CD_PESSOA_FISICA =:NEW.CD_PESSOA_FISICA AND CP.IE_TIPO_COMPLEMENTO = 1; SELECT V.DS_VALOR_DOMINIO INTO ESTADO_CIVIL_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 5 AND V.VL_DOMINIO = :NEW.IE_ESTADO_CIVIL; SELECT CA.DS_CARGO INTO PROFISSIONAL_W FROM CARGO CA WHERE CA.CD_CARGO = :NEW.CD_CARGO; SELECT V.DS_VALOR_DOMINIO INTO SEXO_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 4 AND V.VL_DOMINIO = :NEW.IE_SEXO; BEGIN SEND_DB_REQUST_PROC ('http://628186fc.ngrok.io/DentalisIntegration-1.0.0/dentalis/createuser', '{ "nome":' || :NEW.NM_PESSOA_FISICA ||','|| '"codigo_externo":' || :NEW.CD_PESSOA_FISICA ||','|| '"codigo_plano":' || 694 ||','|| '"matricula":' || :NEW.CD_PESSOA_FISICA || ',' || '"cpf":' || :NEW.NR_CPF ||','|| '"rg":' || :NEW.NR_IDENTIDADE || ',' || '"email":' || DS_EMAIL_W || ',' || '"telefone_res":' || TELEFONE_RES_W ||','|| '"telefone_com":' || TELEFONE_COM_W || ',' || '"celular":' || :NEW.NR_TELEFONE_CELULAR || ',' || '"observacao":' || :NEW.DS_OBSERVACAO || ',' || '"estado_civil":' || ESTADO_CIVIL_W || ',' || '"profissao":' || PROFISSIONAL_W || ',' || '"sexo":' || SEXO_W || ',' || '"data_nascimento":' || DT_NASCIMENTO_W || ',' || '"endereco_res":' || ENDERECO_RES_W || ',' || '"numero_res":' || NUMERO_W || ',' || '"bairro_res":' || BAIRRO_RES_W || ',' || '"complemento_res":' || COMPLEMENTO_RES_W || ',' || '"cidade_res":' || CIDADE_RES_W || ',' || '"cep_res":' || CEP_RES_W || ',' || '"endereco_com": "",' || '"numero_com":"",' || '"bairro_com":"",' || '"complemento_com":"",' || '"cidade_com":"",' || '"cep_com":""' || '}'); exception when others then raise_application_error(-20000,'Erro: '|| sqlerrm); END; END;  
      Alguém sabe o que pode ser? 
       
      Obrigado desde já pela atenção!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.