Questão nº 55
Questão de Tecnologia da Informação · FGV TJ-SE Servidor 2023 (nº 55)
Analise o script de uma stored procedure no âmbito do SQL Server.
CREATE PROCEDURE TESTE
@CPF varchar(11),
@Produdo varchar(12)
AS
SELECT count() Contagem
FROM VENDA
WHERE CPF = @CPF
AND CodProdudo = @Produdo;
Nesse contexto, considere as três hipóteses de comandos que invocam o procedimento armazenado TESTE*.
I.
EXECUTE TESTE '99999999900', '1000999';
II.
EXEC TESTE @CPF = '99999999900',
@Produdo = '1000999';
III.
EXECUTE TESTE @CPF = '99999999900' and
@Produdo = '1000999';
Está correto o que se apresenta em:
- Asomente I;
- Bsomente I e II; (alternativa correta)
- Csomente I e III;
- Dsomente II e III;
- EI, II e III.
Resposta comentada
Gabarito Alternativa B
Stored procedures são blocos de código SQL pré-compilados e armazenados no banco de dados, que podem ser executados (chamados) para realizar tarefas específicas, recebendo ou não valores (parâmetros) para personalizar sua execução.
(A) Incorreta: A alternativa I está correta, mas não é a única.
(B) Correta: Ambas as formas de invocação (I e II) são válidas no SQL Server. A alternativa I utiliza a passagem de parâmetros por posição, onde os valores são atribuídos aos parâmetros na ordem em que foram declarados na procedure. A alternativa II utiliza a passagem de parâmetros por nome, onde cada valor é explicitamente associado ao seu respectivo parâmetro usando `@nome_do_parametro = valor`, o que é mais claro e permite mudar a ordem dos parâmetros.
(C) Incorreta: A alternativa III está incorreta.
(D) Incorreta: A alternativa III está incorreta.
(E) Incorreta: A alternativa III está incorreta.
Armadilha da alternativa III: O uso do operador `AND` na alternativa III (`@CPF = '...' and @Produdo = '...'`) é a pegadinha. O `AND` é um operador lógico usado para combinar condições booleanas, não para separar atribuições de parâmetros. O SQL Server tentaria avaliar a expressão `(@CPF = '99999999900' AND @Produdo = '1000999')` como um único valor booleano (verdadeiro ou falso) e tentaria passá-lo como o primeiro e único parâmetro para a procedure, o que resultaria em um erro de sintaxe ou de conversão de tipo de dados, pois a procedure espera dois parâmetros `varchar`.
Fonte: FGV TJ-SE Servidor 2023 Analista Judiciário - Análise de Sistemas - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.