Questão 20 - HCPA 2020 - ANALISTA DE TI (ADMINISTRAÇÃO DE BANCO DE DADOS)

questão 20 comando Oracle 12c triggers e funções

Confira abaixo a resposta da questão sobre a criação de tabela, função e triggers e inserção de dados no Oracle Usando PL/SQL.

Considere os comandos abaixo no Oracle 12c, sequencialmente, de cima para baixo: 

 

CREATE TABLE pacientes 

(id integer, 

 nome varchar2(100), 

 sexo char(1)); 

 

create or replace function valida_paciente(p_nome varchar2, p_sexo char) return 

boolean as 

 v_resultado integer; 

begin 

 select count(*) into v_resultado from pacientes where nome = p_nome and sexo = 

p_sexo; 

 

 if v_resultado = 1 then 

 return false; 

 else 

 return true; 

 end if; 

end; 

 

create or replace trigger trg_pacientes 

 before insert on pacientes for each row 

begin 

 if not valida_paciente(nome, sexo) then 

 raise_application_error(-20000,'PACIENTE DUPLICADO'); 

 end if; 

end; 

 

insert into pacientes (id, nome, sexo) values (1, 'JOAO DA SILVA', 'M'); 

insert into pacientes (id, nome, sexo) values (2, 'MARIA OLIVEIRA', 'F'); 

insert into pacientes (id, nome, sexo) values (3, 'JOSE SILVEIRA', 'M'); 

insert into pacientes (id, nome, sexo) values (4, 'JOAO DA SILVA', 'M'); 

commit; 

O que ocorrerá ao se executarem os referidos comandos? 

(A) Erro ao criar a tabela. 

(B) Erro ao criar a function. 

(C) Erro ao criar a trigger. 

(D) Erro ao inserir o último registro. 

(E) Todos os comandos serão executados com sucesso.

Vamos analisar cada parte dos comandos sequencialmente:

Criação da Tabela:

O comando CREATE TABLE cria uma tabela chamada "pacientes" com três colunas: "id" do tipo inteiro e "nome" e "sexo" do tipo VARCHAR2 e CHAR, respectivamente. Este comando será executado com sucesso, pois não há erros sintáticos aparentes.

Criação da Função:

O comando CREATE OR REPLACE FUNCTION cria uma função chamada "valida_paciente". Esta função recebe um nome e um sexo como parâmetros e retorna um valor booleano. No entanto, há um problema de lógica na função: ela retorna TRUE se o paciente não existe na tabela, o que contradiz a lógica esperada. A função deve retornar TRUE se o paciente não existe e FALSE se existe. Portanto, houve um erro de lógica na função.

Criação do Trigger:

A trigger não funcionará adequadamente devido a algumas questões no código e na lógica de implementação:

Parâmetros da função: Na função valida_paciente, os parâmetros p_nome e p_sexo estão sendo passados como parâmetros da função. No entanto, na chamada da função dentro da trigger trg_pacientes, os parâmetros estão sendo referenciados diretamente (valida_paciente(nome, sexo)). Isso causará um erro de compilação porque nome e sexo não estão definidos no escopo da trigger. Eles deveriam ser referenciados como :new.nome e :new.sexo, respectivamente, para indicar os valores do registro sendo inserido.

Lógica da função: A função valida_paciente retorna verdadeiro se o paciente não for duplicado e falso se for. No entanto, na trigger trg_pacientes, o condicional está invertido. O correto seria verificar se a função retorna falso, indicando que o paciente é duplicado, e então lançar o erro.

Para corrigir o problema, é necessário ajustar a lógica da função valida_paciente para retornar verdadeiro se o paciente for duplicado e falso caso contrário. Além disso, na trigger trg_pacientes, os parâmetros devem ser referenciados corretamente usando :new.nome e :new.sexo. E, por fim, o condicional na trigger deve ser invertido para capturar corretamente a situação de paciente duplicado.

Após corrigir esses problemas, a trigger será capaz de impedir a inserção de pacientes duplicados de acordo com a lógica definida na função valida_paciente.

Inserções de Dados:

Há tentativas de inserção de quatro registros na tabela "pacientes". Os três primeiros registros devem ser inseridos com sucesso. No entanto, o quarto registro tenta inserir um paciente com nome e sexo iguais a um paciente já existente na tabela. Como o trigger verificará a duplicidade e lançará um erro com raise_application_error, a inserção do quarto registro falhará.

Portanto, a resposta correta é:

De acordo com o gabarito a resposta correta é a (C) Erro ao criar a trigger.

Vamos analisar cada opção:

(A) Erro ao criar a tabela:

Essa opção está incorreta, pois não há nenhum problema aparente na criação da tabela. A tabela é definida corretamente com três colunas (id, nome e sexo).

(B) Erro ao criar a função:

A criação da função valida_paciente parece estar correta. Não há erros de sintaxe evidentes. Portanto, essa opção também está incorreta.

(C) Erro ao criar a trigger:

Esta é a resposta correta, pois a trigger tenta chamar a função valida_paciente sem referenciar corretamente os parâmetros (nome e sexo). Além disso, a lógica do condicional na trigger está invertida, o que causará um comportamento inadequado.

(D) Erro ao inserir o último registro:

Essa opção está incorreta, pois a trigger deveria impedir a inserção do último registro, devido à tentativa de inserir um paciente duplicado. Portanto, a inserção do último registro deve resultar em um erro.

(E) Todos os comandos serão executados com sucesso:

Essa opção está incorreta. A trigger está com problemas de referência de parâmetros e lógica invertida, o que resultará em um erro ao tentar inserir o último registro.

Portanto, a resposta correta é (C) Erro ao criar a trigger, pois a trigger contém erros que impedirão sua criação bem-sucedida e, consequentemente, a execução dos comandos relacionados a ela.

Qual o assunto dessa questão?

O assunto principal dessa questão está relacionado à criação e utilização de triggers em bancos de dados Oracle, bem como a interação entre triggers e funções PL/SQL. A questão aborda a sintaxe e a lógica por trás da criação de uma trigger para validar dados antes de sua inserção em uma tabela. Também envolve a compreensão do uso de funções PL/SQL dentro de triggers e a manipulação de erros durante o processo de inserção de dados. Portanto, o assunto principal é o uso de triggers e funções PL/SQL para impor regras de integridade de dados em um banco de dados Oracle.

Quer acompanhar as novidade do site?

Leia mais em: iretoaoponto-tech.com.br/conc...

Questão 20 - HCPA 2020 - ANALISTA DE TI (ADMINISTRAÇÃO DE BANCO DE DADOS)

Última atualização: 2024-02-16

Quer acompanhar as novidade do site?
Veja também:

Como remover caracteres especiais no mysql?

remover caracteres especiais mysql

Como remover espaços em branco no php?

remover espaços php

Questão 12 - HCPA 2011 - ANALISTA DE SISTEMAS I (ADMINISTRADOR DE BANCO DE DADOS E SEGURANÇA DA INFORMAÇÃO)

questão 12 PLSQL package

Como retirar tudo que não for número em php?

Deixar apenas Número

Como remover acentos e caracteres especiais em PHP?

Remover acentos e caracteres especiais com PHP

Como alterar nome da tabela no MySQL?

Alterar nome de tabela mysql

Web Stories