O PL/SQL (Procedural Language / Structured Query Language – Linguagem Procedural / Linguagem de Consulta Estruturada) foi introduzido pela Oracle no Oracle Database 6. Permite escrever programas que contêm instruções SQL. No código PL/SQL, as exceções são usadas para tratar erros em tempo de execução. Sobre as exceções em PL/SQL, assinale a alternativa INCORRETA.
- A)NO_DATA_FOUND: uma instrução SELECT INTO retornou mais de uma linha.
Errada: NO_DATA_FOUND ocorre quando o SELECT INTO nao retorna nenhuma linha, enquanto mais de uma linha gera TOO_MANY_ROWS.
- B)STORAGE_ERROR: o módulo PL/SQL ficou sem memória ou a memória se corrompeu.
Certa: STORAGE_ERROR e usada quando ha falta de memoria ou corrupcao de memoria no modulo PL/SQL.
- C)TIMEOUT_ON_RESOURCE: o tempo-limite foi atingido, enquanto o banco de dados estava esperando um recurso.
Certa: TIMEOUT_ON_RESOURCE indica que o tempo limite foi atingido enquanto o banco esperava um recurso.
- D)CASE_NOT_FOUND: nenhuma das cláusulas WHEN de uma instrução CASE foi selecionada e não há nenhuma cláusula ELSE padrão.
Certa: CASE_NOT_FOUND acontece quando nenhum WHEN de um CASE e atendido e nao existe clausula ELSE.
Gabarito: A
Em PL/SQL, excecoes sao o jeito de tratar situacoes anormais sem deixar o programa “quebrar” de forma desorganizada. Algumas sao predefinidas pela Oracle e voce costuma ver isso bastante em prova: NO_DATA_FOUND, TOO_MANY_ROWS, STORAGE_ERROR, TIMEOUT_ON_RESOURCE, CASE_NOT_FOUND, entre outras. Cada uma aponta para um tipo bem especifico de problema em tempo de execucao. A ideia central aqui e simples: a excecao precisa ser associada ao evento correto. Se um SELECT INTO nao encontra linha, a excecao tipica e NO_DATA_FOUND. Se a consulta retorna mais de uma linha, a excecao correta e TOO_MANY_ROWS. A banca trocou esses conceitos na alternativa A, e foi ai que a questao “armou a casca de banana”. As outras alternativas estao coerentes com as definicoes padrao do PL/SQL: STORAGE_ERROR indica falta de memoria ou corrupcao de memoria; TIMEOUT_ON_RESOURCE ocorre quando o tempo limite expira esperando um recurso; e CASE_NOT_FOUND aparece quando nenhum WHEN de um CASE foi atendido e nao existe ELSE. Ou seja, o erro da letra A esta em atribuir a NO_DATA_FOUND um resultado de “mais de uma linha”, quando na verdade isso descreve TOO_MANY_ROWS. Em prova de Oracle, decorar esse par costuma salvar alguns pontos preciosos.