Um pacote ou package no Oracle Database 12c é um objeto que agrupa variáveis, constantes, subprogramas, cursores e exceções, logicamente relacionados no PL/SQL. Considerando esse tema, analise as afirmações a seguir: I-Ao criar um pacote, não é permitido fazer referência a variáveis públicas de pacotes remotos. II-A cláusula AUTHID DEFINER, usada na criação do pacote, determina que um subprograma ou cursor pode ser executado com o privilégio de definidor. III-Um pacote sempre tem uma especificação na qual são declarados os itens públicos que podem ser referenciados de fora do pacote. É correto o que se afirma em:
- A)I, II e III.
A opção reúne as três proposições do enunciado e todas se ajustam ao modelo de packages no Oracle. A referência a variáveis públicas de pacotes remotos não é admitida como acesso direto em PL/SQL, AUTHID DEFINER faz a execução ocorrer com os privilégios do definidor, e a specification é a parte pública do package, onde ficam as declarações visíveis externamente. Por isso, a combinação apresentada descreve corretamente a estrutura e as regras do pacote.
- B)II, apenas.
Esta opção afirma que somente a proposição II sustenta a resposta. O problema é que, além da regra de AUTHID DEFINER, o enunciado também traz a vedação de referência a variáveis públicas de pacotes remotos e a exigência de specification para expor os itens públicos, ambos pontos compatíveis com o Oracle. Assim, a alternativa fica incompleta por ignorar outras assertivas corretas.
- C)I e II, apenas.
Aqui se sustenta que as proposições I e II bastam para fechar a resposta. Embora essas duas estejam de acordo com o PL/SQL, a terceira também corresponde ao funcionamento do package, porque a specification concentra os elementos públicos acessíveis de fora do pacote. Como essa assertiva também é verdadeira, a alternativa erra por excluir um item correto.
- D)III, apenas.
Esta escolha considera apenas a proposição III, isto é, a ideia de que todo package tem uma specification com as declarações públicas. Essa parte está alinhada ao Oracle, mas o enunciado também traz a restrição sobre variáveis públicas de pacotes remotos e a cláusula AUTHID DEFINER, que igualmente estão corretas. Logo, a resposta falha por selecionar só uma fração do conjunto verdadeiro.
- E)I, apenas.
A opção reduz o acerto à proposição I, como se apenas a vedação de referência a variáveis de pacotes remotos explicasse a questão. Só que AUTHID DEFINER efetivamente ativa o regime de privilégios do definidor, e a specification é a seção pública obrigatória do package, onde ficam os itens acessíveis externamente. Portanto, a alternativa deixa de fora duas afirmações igualmente corretas.
Gabarito: A
No Oracle, package e quase como uma “caixa organizada” de PL/SQL: nele voce agrupa variaveis, constantes, cursores, excecoes e subprogramas que fazem sentido juntos. A grande ideia e esconder detalhes internos no corpo do package e expor so o que for util na especificacao, que funciona como a “vitrine” do pacote. A afirmacao III esta correta porque todo package tem especificacao. E na especificacao que ficam declarados os elementos publicos, ou seja, os que podem ser acessados de fora do pacote. O corpo guarda a implementacao e os itens privados. Essa divisao e classica em PL/SQL e aparece na documentacao oficial do Oracle Database. A afirmacao II tambem esta correta. A clausula AUTHID DEFINER faz com que os subprogramas do package executem com os privilegios do definidor, isto e, do dono do objeto. Em termos de prova, pense assim: quem chama nao leva a “carteirinha de acesso” no bolso; quem manda aqui e o definidor. E a afirmacao I tambem esta correta no contexto cobrado pela banca: ao criar um package, nao se faz referencia a variaveis publicas de packages remotos. Ou seja, o Oracle nao permite esse tipo de amarracao direta durante a criacao do pacote. Resultado: I, II e III estao certas, entao o gabarito e A.