Questão nº 47
Questão de Banco de Dados · FGV CGE-SC 2022 (nº 47)
É comum, em um sistema de informação que utiliza banco de dados relacional, como por exemplo o MySQL, executar diferentes comandos SQL em sequência para obter um resultado. A depender do que será realizado, muitos SQL em sequência podem ser executados em módulos diferentes do mesmo sistema. Para estimular a reutilização de código, tornar a programação mais simples, além de compartilhar com os servidores de banco de dados o uso de recursos computacionais para executar os comandos SQL, o SGBD permite criar objetos chamados Stored Procedure.
Os SGBDs possuem regras estabelecidas para a criação de Stored Procedure. Ao utilizar o MySQL, analise as afirmativas a seguir.
I. Na construção de uma Stored Procedure, o MySQL permite o uso do comando RETURN para retornar ao programa principal o valor do dado tratado.
II. No MySQL, os parâmetros recebidos por uma Stored Procedure podem ser do tipo IN, que informa que somente aceita dados de entrada, OUT, que informa que o parâmetro é utilizado apenas para retorno, ou INOUT, em que o parâmetro é utilizado para entrada e retorno.
III. No MySQL, uma Stored Procedure é finalizada ao utilizar o comando END, uma vez que o sinal de ponto e vírgula delimita o fim da instrução SQL.
Está correto o que se afirma em
- AII e III, apenas.
- BIII, apenas.
- CI e II, apenas.
- DI e III, apenas.
- EII, apenas. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Uma Stored Procedure (ou Procedimento Armazenado) é um conjunto de comandos SQL pré-compilados e armazenados no banco de dados. Ela funciona como uma função ou rotina que pode ser chamada várias vezes, ajudando a organizar o código, aumentar a performance e a segurança.
- (A) Incorreta: O comando
RETURNem MySQL é usado principalmente em Stored Functions para retornar um valor escalar. Em Stored Procedures,RETURNsimplesmente encerra a execução do procedimento, mas não retorna um valor para o chamador da mesma forma que uma função. Para retornar valores de uma Stored Procedure, são utilizados parâmetros do tipoOUTouINOUT. - (B) Incorreta: Esta é a alternativa distratora mais tentadora. Embora o
ENDseja usado para marcar o fim do corpo da Stored Procedure, a instruçãoCREATE PROCEDUREcompleta (que inclui oEND) é finalizada pelo delimitador de instrução. No MySQL, o delimitador padrão é o ponto e vírgula (;). No entanto, como o corpo da procedure pode conter múltiplos pontos e vírgulas, é comum e necessário mudar temporariamente o delimitador (por exemplo, para$$) antes de criar a procedure e depois resetá-lo. Portanto, a procedure não é "finalizada ao utilizar o comando END, uma vez que o sinal de ponto e vírgula delimita o fim da instrução SQL" de forma direta, pois o ponto e vírgula dentro da procedure seria interpretado como o fim daCREATE PROCEDUREse o delimitador não fosse alterado. OENDmarca o fim do bloco de código da procedure, mas a instruçãoCREATE PROCEDURE ... ENDé encerrada pelo delimitador customizado (ex:END\$$). - (C) Incorreta: A afirmativa I está incorreta, como explicado acima.
- (D) Incorreta: Ambas as afirmativas I e III estão incorretas, como explicado acima.
- (E) Correta: No MySQL, os parâmetros de uma Stored Procedure podem ser definidos com três modos:
IN(apenas para entrada de dados, o valor original não é alterado fora da procedure),OUT(apenas para saída de dados, o valor é retornado ao chamador) eINOUT(para entrada e saída de dados, o valor inicial é lido e o valor final é retornado ao chamador). Esta afirmativa descreve corretamente o funcionamento desses modos de parâmetro.
Fonte: FGV CGE-SC 2022 Auditor do Estado - Ciências da Computação (Caderno Tipo 1). Reproduzida para fins de estudo.