Boa noite,
Estou fazendo uma procedure para novo cliente, na qual segue abaixo,
gostaria de saber qual a diferença entre usar:
select ‘Cliente já cadastrado’ ou print ‘Cliente já cadastrado’, está mensagem deve ser visualizada na tela de cadastro de cliente
Create procedure adicionar_cliente(
@nome varchar(50),
@telefone varchar(14),
@cpf varchar(14)
)
as
begin
begin try
insert into Cliente values (@nome, @telefone, @cpf)
end try
begin catch
select 'Cliente já cadastrado'
end catch
end
A primeira coisa que recomendaria é não resumir qualquer erro possível a “Cliente não cadastrado”.
Sempre há a chance de ser algo totalmente diferente ( CPF com mais dígitos que o campo, por exemplo).
A diferença entre print e select é que o print é utilizando pra debug.
Apenas em ferramentas específicas do sql server (Query Analyser) ou seu programa ler metadados do resultset terá acesso a eles.
Com select você retornará um resultset contendo uma coluna, uma linha, contendo o valor “Cliente não cadastrado”
Usaria o método executeQuery para ler esse valor.
Na prática, nenhum dos dois é um tratamento de erro decente.
Seria mais interessante você deixar a procedure gerar um erro e ser tratada na aplicação.
Com isso você garante que qualquer chamada a procedure terá que lidar com esse problema.
Se utilizar a abordagem do select (muito utilizada por sinal), dará brecha ao chamador simplesmente ignorar os erros.
Certo, é que neste caso a tabela de cliente é a seguinte
Create table Cliente(
cli_codigo int primary key identity,
cli_nome varchar(50) not null,
cli_telefone varchar(14) not null,
cli_cpf varchar(14) not null unique
)
Então o certo seria fazer um:
select text from sys.messages
where message_id = @@error and language_id = 1046