{"subject_id":"3a3cc48d00998177a784ea21ae0fb08f","topico":"PL/SQL: blocos, cursores, procedures × functions, packages, triggers","stems":["No que se refere à integração de sistemas, à arquitetura de software, aos testes de software e aos bancos de dados, julgue os itens subsecutivos.","A respeito de linguagens de bancos de dados e administração de bancos de dados, julgue os itens subsequentes.","A respeito de banco de dados, julgue os próximos itens.","Julgue os itens a seguir, relativos a sistema gerenciador de banco de dados (SGBD).","A respeito de banco de dados, julgue os seguintes itens.","A respeito de banco de dados, julgue os itens seguintes.","Em relação a projeto, modelagem e administração de banco de dados, julgue os itens subsequentes.","Quanto aos conceitos relativos à arquitetura de dados, julgue os itens a seguir.","Quanto a gatilhos (triggers), procedimentos armazenados (stored procedures) e gerência de bloqueios, julgue os itens subsecutivos.","Acerca de bancos de dados relacionais, julgue os itens seguintes.","Julgue os itens seguintes, relativos ao banco de dados Oracle.","Julgue os itens subsequentes, a respeito do Postgres 9.6.","Julgue os itens subsecutivos, referentes às tecnologias de bancos de dados.","Um banco de dados permite à aplicação o armazenamento e a recuperação de dados com eficiência, o que garante segurança e integridade das informações. No caso de banco de dados relacional, os dados são armazenados em tabelas e os relacionamentos entre elas as tornam relacionais. A esse respeito, julgue os itens que se seguem."],"questions":[{"id":"f315e2679d83","number":66,"stem":0,"statement":"Stored procedures em PL/SQL são estruturas armazenadas diretamente no banco de dados que permitem a execução de instruções SQL pré-compiladas, o que reduz o tráfego de rede e melhora o desempenho das aplicações.","answer":"C","source":{"slug":"STM_25","ano":2025},"explanation":{"verdict_reason":"São as vantagens clássicas do procedimento armazenado: o código fica no servidor, já analisado e com plano de execução preparado, e a aplicação envia apenas a chamada e os parâmetros em vez de todo o texto SQL. Menos texto trafegando e menos trabalho de compilação por execução resultam em menor tráfego de rede e melhor desempenho.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Stored procedure reduz tráfego e reaproveita compilação","citation":null,"trap_note":"Guarde as quatro vantagens do procedimento armazenado — desempenho por pré-compilação, menos tráfego de rede, reúso e centralização de regra, e segurança por concessão de EXECUTE sem acesso direto à tabela. Itens Certos deste assunto quase sempre repetem uma delas."}},{"id":"cf650ded990a","number":76,"stem":1,"statement":"Triggers de banco de dados funcionam com base no modelo extração-carga-ação (ECA), em que a extração identifica o momento de ativação do trigger.","answer":"E","source":{"slug":"TELEBRAS_25","ano":2025},"explanation":{"verdict_reason":"A sigla ECA significa evento-condição-ação, e não extração-carga-ação. Quem identifica o momento de ativação do gatilho é o evento — o comando de inserção, atualização ou exclusão sobre a tabela. Extração e carga são etapas de ETL, assunto de integração de dados, sem relação com o disparo de gatilhos.","distortion_type":"troca_de_termo","distorted_span":"extração-carga-ação (ECA), em que a extração identifica o momento de ativação do trigger","corrected_statement":"Triggers de banco de dados funcionam com base no modelo evento-condição-ação (ECA), em que o evento identifica o momento de ativação do trigger.","concept":"ECA é evento-condição-ação, não extração-carga","citation":null,"trap_note":"A banca mantém a sigla e troca a expansão, importando palavras de outro assunto do mesmo edital — aqui, o vocabulário de ETL. Expanda toda sigla de memória antes de conferir a do item."}},{"id":"3eebff567e6e","number":103,"stem":2,"statement":"Os triggers são baseados no modelo evento-condição-ação, no qual um evento no banco de dados dispara uma ação quando determinada condição é atingida.","answer":"C","source":{"slug":"ANM_24","ano":2024},"explanation":{"verdict_reason":"É a definição de regra ativa adotada pela literatura de bancos de dados: o gatilho é uma regra evento-condição-ação. O evento é o comando que o dispara, tipicamente INSERT, UPDATE ou DELETE; a condição é o predicado avaliado quando o evento ocorre; a ação é o bloco executado se a condição for verdadeira. O item enuncia os três elementos na ordem correta.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Trigger é regra evento-condição-ação (ECA)","citation":null,"trap_note":"ECA é a sigla mais cobrada do assunto e a mais fácil de adulterar, porque a banca só troca o significado de uma letra. Expanda a sigla por conta própria antes de ler a expansão do item."}},{"id":"00efbc85a4e6","number":78,"stem":3,"statement":"Em banco de dados, o recurso de programação do tipo procedimento é utilizado de forma automática e implícita sempre que ocorre um evento tal como INSERT, UPDATE ou DELETE associado à tabela.","answer":"E","source":{"slug":"CNPQ_23","ano":2023},"explanation":{"verdict_reason":"Execução automática e implícita a cada INSERT, UPDATE ou DELETE associado à tabela é a definição de gatilho. O procedimento armazenado é o oposto nesse ponto: só roda quando alguém o chama explicitamente, por EXECUTE ou CALL, a partir de uma aplicação, de outro bloco ou de um agendamento. A descrição está correta, mas o recurso nomeado é o errado.","distortion_type":"troca_de_termo","distorted_span":"o recurso de programação do tipo procedimento","corrected_statement":"Em banco de dados, o recurso de programação do tipo gatilho é utilizado de forma automática e implícita sempre que ocorre um evento tal como INSERT, UPDATE ou DELETE associado à tabela.","concept":"Gatilho dispara implicitamente; procedimento é chamado","citation":null,"trap_note":"Este é o eixo que decide a maioria dos itens do assunto: quem chama. Gatilho é chamado pelo evento, procedimento e função são chamados por alguém. Ache o verbo de acionamento antes de julgar o resto da frase."}},{"id":"a0098484972e","number":119,"stem":4,"statement":"Um trigger de banco de dados pode ser disparado antes ou depois de um comando e pode, até mesmo, substituir esse comando.","answer":"C","source":{"slug":"CAPES_23","ano":2023},"explanation":{"verdict_reason":"O gatilho tem tempo de disparo declarado: BEFORE executa antes do comando e AFTER, depois dele. Existe ainda o INSTEAD OF, que executa em lugar do comando que o disparou, recurso usado sobretudo para tornar atualizáveis visões que o SGBD não atualizaria sozinho. Os três casos afirmados pelo item existem.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Gatilhos BEFORE, AFTER e INSTEAD OF","citation":null,"trap_note":"INSTEAD OF é o recurso que a banca usa para testar se o candidato acha que o gatilho só complementa o comando. Ele substitui o comando, e por isso a afirmação de substituição é Certa."}},{"id":"e794f73df7db","number":84,"stem":5,"statement":"O cursor armazena, em memória, uma única linha do comando de SELECT de uma consulta que tenha sido efetuada em tabelas do banco de dados.","answer":"E","source":{"slug":"BANCO_DO_NORDESTE_22","ano":2022},"explanation":{"verdict_reason":"O cursor é a área de trabalho que dá acesso ao conjunto de linhas retornado pelo SELECT, mantendo um ponteiro para a linha corrente. O que devolve uma linha por vez é o FETCH, operação sobre o cursor, e não o cursor, que existe justamente porque o resultado tem várias linhas e precisa ser percorrido.","distortion_type":"troca_de_termo","distorted_span":"uma única linha do comando de SELECT","corrected_statement":"O cursor armazena, em memória, o conjunto de linhas do comando de SELECT de uma consulta que tenha sido efetuada em tabelas do banco de dados.","concept":"Cursor guarda o conjunto de linhas e aponta para a corrente","citation":null,"trap_note":"Separe o cursor do FETCH: o cursor é o conjunto e o ponteiro; o FETCH é o passo que traz a linha corrente para as variáveis. Item que reduza o cursor a uma linha confundiu a estrutura com a operação que a percorre."}},{"id":"16d5a7fd3bf1","number":87,"stem":6,"statement":"Quando acionado, um trigger pode ser executado em substituição ao comando que o disparou.","answer":"C","source":{"slug":"BANCO_DO_NORDESTE_22","ano":2022},"explanation":{"verdict_reason":"É o comportamento do gatilho do tipo INSTEAD OF: em vez de complementar o comando, ele o substitui, e a instrução original não chega a ser executada. O uso típico é permitir inserção, atualização ou exclusão sobre visões, redirecionando a operação para as tabelas de base.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Gatilho INSTEAD OF substitui o comando disparador","citation":null,"trap_note":"Guarde os três tempos como um conjunto fechado — antes, depois e em lugar de. Item que afirme que o gatilho sempre executa depois do comando, ou que nunca pode substituí-lo, ignora o INSTEAD OF e está errado."}},{"id":"9591d1831a0a","number":60,"stem":7,"statement":"Entre outras funcionalidades, uma stored procedure pode melhorar o desempenho de um banco de dados e criar tarefas agendadas; procedimentos de sistema são armazenados no banco de dados padrão do SQL Server e executam as tarefas administrativas, a partir de qualquer banco de dados.","answer":"C","source":{"slug":"PETROBRAS_21_NS","ano":2021},"explanation":{"verdict_reason":"As duas metades do item são verdadeiras. O procedimento armazenado melhora o desempenho por ficar pré-compilado no servidor e pode ser acionado por rotinas agendadas, inclusive para tarefas de manutenção. E os procedimentos de sistema do SQL Server, os que começam por sp_, residem no banco de dados padrão e podem ser executados a partir de qualquer banco, exatamente para executar tarefas administrativas.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Procedimentos de sistema ficam no banco padrão e rodam de qualquer banco","citation":null,"trap_note":"Item longo com duas afirmações independentes exige julgar cada uma isoladamente: basta uma falsa para o item ser Errado, e basta uma verdadeira ser lida como se resumisse o todo para o candidato errar."}},{"id":"7461788bbbe0","number":111,"stem":8,"statement":"Bloqueio de um banco de dados é gerado para contornar o conflito de consulta simultânea de tabelas por um usuário do aplicativo desenvolvido.","answer":"E","source":{"slug":"PETROBRAS_21_NS","ano":2021},"explanation":{"verdict_reason":"O bloqueio é mecanismo de controle de concorrência entre transações simultâneas de usuários distintos, e o conflito que ele resolve envolve escrita: leitura com leitura não conflita e, portanto, consulta simultânea não é o caso que motiva o bloqueio. A finalidade descrita no item — contornar conflito de consulta de um usuário do aplicativo — não corresponde ao que o mecanismo faz.","distortion_type":"relacao_causal","distorted_span":"para contornar o conflito de consulta simultânea de tabelas por um usuário do aplicativo desenvolvido","corrected_statement":"Bloqueio de um banco de dados é gerado para controlar o acesso concorrente às tabelas por transações simultâneas, evitando conflitos entre operações de leitura e de escrita.","concept":"Bloqueio controla concorrência entre transações","citation":null,"trap_note":"Em item de bloqueio, confira dois elementos: quantos agentes estão em disputa e que tipo de operação conflita. Concorrência supõe mais de uma transação, e o conflito exige que ao menos uma delas escreva."}},{"id":"a3c50416916b","number":112,"stem":8,"statement":"Trigger é um tipo especial de procedimento armazenado que é executado em resposta a determinado evento na tabela, como inserção, exclusão ou atualização de dados.","answer":"C","source":{"slug":"PETROBRAS_21_NS","ano":2021},"explanation":{"verdict_reason":"É a definição corrente de gatilho, inclusive na documentação do SQL Server: um tipo especial de procedimento armazenado que não é chamado diretamente, mas executado automaticamente em resposta a um evento sobre a tabela — inserção, exclusão ou atualização. O item preserva tanto o gênero quanto a diferença específica.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Trigger é procedimento armazenado disparado por evento","citation":null,"trap_note":"Dizer que o gatilho é um procedimento armazenado especial é Certo; dizer que o procedimento armazenado é um gatilho é Errado. A relação de gênero e espécie só vale em um sentido."}},{"id":"bad3baee0377","number":52,"stem":9,"statement":"Triggers e stored procedures são componentes do modelo físico, enquanto relacionamentos e primary keys são componentes do modelo lógico.","answer":"C","source":{"slug":"FUB_19","ano":2019},"explanation":{"verdict_reason":"O modelo lógico descreve a estrutura independentemente do produto: entidades, atributos, relacionamentos e chaves, inclusive a primária. O modelo físico descreve o que só existe dentro de um SGBD concreto, e é aí que entram objetos programáveis e de implementação — gatilhos, procedimentos armazenados, índices, tablespaces, particionamento. O item aloca cada objeto no nível certo.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Trigger e procedure são objetos do modelo físico","citation":null,"trap_note":"Use uma pergunta só para separar os três níveis: conceitual é o que o negócio enxerga, lógico é o que sobrevive à troca de SGBD, físico é o que morre com ela. Tudo que dependa da linguagem procedural do produto é físico."}},{"id":"4303f0a45eee","number":54,"stem":10,"statement":"Em Oracle PL/SQL, a declaração CONSTANT não pode impor a restrição NOT NULL.","answer":"E","source":{"slug":"TRF1_17_SERVIDOR","ano":2017},"explanation":{"verdict_reason":"A declaração de constante em PL/SQL admite a restrição NOT NULL: a sintaxe é nome CONSTANT tipo NOT NULL := valor. Não há incompatibilidade entre as duas cláusulas — CONSTANT impede a reatribuição posterior e NOT NULL impede a atribuição de nulo, e ambas exigem a inicialização na própria declaração. O item nega uma possibilidade que a linguagem oferece.","distortion_type":"inversao","distorted_span":"não pode impor a restrição NOT NULL","corrected_statement":"Em Oracle PL/SQL, a declaração CONSTANT pode impor a restrição NOT NULL.","concept":"CONSTANT e NOT NULL coexistem na mesma declaração","citation":"Oracle Database PL/SQL Language Reference, declaração de constantes (constant declaration)","trap_note":"Item que nega uma capacidade da linguagem, sem citar exceção nem versão, é o formato mais comum de Errado em bloco procedural. Descrições permissivas de sintaxe costumam ser Certas; proibições inventadas, não."}},{"id":"eb353247befd","number":81,"stem":11,"statement":"Ao se criar uma trigger, a variável especial TG_OP permite identificar que operação está sendo executada, por exemplo, DELETE, UPDATE, INSERT ou TRUNCATE.","answer":"C","source":{"slug":"STM_17_ANALISTA_TECNICO","ano":2017},"explanation":{"verdict_reason":"Nas funções de gatilho em PL/pgSQL, o PostgreSQL preenche variáveis especiais, entre elas TG_OP, que recebe o texto da operação que disparou o gatilho — INSERT, UPDATE, DELETE ou TRUNCATE. É justamente o que permite escrever um único gatilho que trate as operações de forma distinta.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"TG_OP informa a operação que disparou o gatilho","citation":"PostgreSQL, documentação de PL/pgSQL, procedimentos de gatilho (variáveis TG_OP, TG_NAME, NEW e OLD)","trap_note":"Aprenda o trio de variáveis do gatilho: NEW é a linha nova, OLD é a linha antiga, TG_OP é a operação. Em item que troque NEW por OLD, a inversão decide sozinha a questão."}},{"id":"caa1bb1d79ea","number":82,"stem":11,"statement":"Nas instruções seguintes, a palavra-chave IMMUTABLE indica que a função criada não pode modificar o banco de dados.\n\nCREATE FUNCTION add(integer, integer) RETURNS integer\n   AS 'select $1 + $2;'\n   LANGUAGE SQL\n   IMMUTABLE\n   RETURNS NULL ON NULL INPUT;","answer":"C","source":{"slug":"STM_17_ANALISTA_TECNICO","ano":2017},"explanation":{"verdict_reason":"No PostgreSQL, IMMUTABLE é a categoria de volatilidade mais restritiva: declara que a função não pode modificar o banco de dados e que retorna sempre o mesmo resultado para os mesmos argumentos, o que autoriza o otimizador a avaliá-la previamente. A função do exemplo apenas soma dois inteiros, coerente com a categoria declarada.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"IMMUTABLE proíbe modificação do banco e garante mesmo resultado","citation":"PostgreSQL, documentação do comando CREATE FUNCTION, categorias de volatilidade","trap_note":"Ordene as três categorias por restrição decrescente: IMMUTABLE não consulta o banco e não o altera; STABLE pode consultar, mas não alterar, e é constante dentro da varredura; VOLATILE pode tudo. A banca troca IMMUTABLE por STABLE."}},{"id":"0467f5ea5025","number":78,"stem":12,"statement":"Por meio da linguagem PL/SQL, é possível invocar explicitamente um trigger.","answer":"E","source":{"slug":"FUNPRESP_16_JUD","ano":2016},"explanation":{"verdict_reason":"O gatilho não é invocável: ele é disparado implicitamente pelo evento ao qual está associado, e não existe comando para executá-lo diretamente. O que se pode fazer é provocar o evento — executar o INSERT, o UPDATE ou o DELETE — ou desabilitar e reabilitar o gatilho. Quem se invoca explicitamente é o procedimento ou a função.","distortion_type":"inversao","distorted_span":"é possível invocar explicitamente um trigger","corrected_statement":"Por meio da linguagem PL/SQL, não é possível invocar explicitamente um trigger, que é disparado implicitamente pelo evento associado à tabela.","concept":"Trigger é disparado implicitamente, nunca chamado","citation":null,"trap_note":"Implícito e explícito é o par que a banca mais inverte aqui, e vale nos dois sentidos: dizer que o gatilho pode ser chamado é Errado, e dizer que o procedimento roda sozinho a cada evento também é."}},{"id":"30d05b85f6ca","number":80,"stem":13,"statement":"Uma das principais desvantagens do banco de dados MySQL é que ele não possui suporte para triggers — gatilhos predefinidos e associados a tabelas — disparados por algum evento específico.","answer":"E","source":{"slug":"TJDFT_15_SERVIDOR","ano":2015},"explanation":{"verdict_reason":"O MySQL suporta gatilhos desde a versão 5.0, com CREATE TRIGGER e os tempos BEFORE e AFTER para INSERT, UPDATE e DELETE. A suposta desvantagem não existe: o item nega um recurso presente no produto.","distortion_type":"inversao","distorted_span":"não possui suporte para triggers","corrected_statement":"O banco de dados MySQL possui suporte para triggers — gatilhos predefinidos e associados a tabelas — disparados por algum evento específico.","concept":"MySQL suporta triggers desde a versão 5.0","citation":null,"trap_note":"Afirmações do tipo o SGBD X não possui o recurso Y quase sempre estão desatualizadas ou são falsas nos SGBD consolidados. Confira se o recurso negado é básico do produto antes de aceitar a limitação."}}]}