SóProvas


ID
1568170
Banca
FUNDATEC
Órgão
BRDE
Ano
2015
Provas
Disciplina
Banco de Dados
Assuntos

Analise o código PL/SQL abaixo:

set serveroutput on

  DECLARE
     TYPE tabela_numeros IS TABLE OF NUMBER;
     list TABELA_NUMEROS := tabela_numeros (1, 2, 3, 4, 5);
 BEGIN
     list.DELETE(2);
  FOR i IN 1..list.COUNT LOOP
    IF list.EXISTS(i) THEN
       DBMS_OUTPUT.PUT('['||list(i)||']');
   END IF;
 END LOOP;
  DBMS_OUTPUT.NEW_LINE;
 END;
 /
O resultado da execução desse código na saída DBMS de um banco de dados Oracle é:

Alternativas
Comentários
  • Alguém pode tirar minhas dúvidas?

    1) Pelo que vi, parece-me que o comando: "list.DELETE(2)" remove o número 2 da lista e não o elemento de índice 2. É isso mesmo?

    2) Existe outro comando que remove pelo índice e não o valor que se encontra na lista?

    3) Para a resposta ser a letra c) [1][3][4] o comando: "FOR i IN 1..list.COUNT" foi somente até o índice 3, o COUNT não deveria ter ido até 4, visto que após ter deletado 1 número na lista ficaram:  1, 3, 4, 5.
  • Fernando, o comando .DELETE não é zero-based.

     

  • Eu acertei esse "na sorte" e óbviamente isso não me deixa satisfeito. Só não entendi pq o "[5]" não apareceria

  • Na referência https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/05_colls.htm

    procure por "Checking If a Collection Element Exists (EXISTS Method)" para entender o funcionamento do EXISTS

    e procure por "Deleting Collection Elements (DELETE Method)" para entender o funcionamento do DELETE

     

    Os índices não são zero-based como outro colega já disse. O DELETE recebe como parâmetro o índice a ser deletado. Após um DELETE o COUNT vai refletir que há um elemento a menos (na questão list.COUNT vai ser 4). Tudo isso você encontra na referência.

    O loop portanto vai ser em 4 elementos, o EXISTS(2) vai retornar FALSE, por isso vai imprimir [1][3][4]

     

    Gabarito: c)