Questão 25 - HCPA 2009/3 - ANALISTA DE SISTEMAS I (ADMINISTRADOR DE BANCO DE DADOS)
questão 25 comando sql plus
Veja abaixo a resposta correta da questão e uma breve análise sobre o conteúdo.
Considere que você esteja no ambiente SQL*Plus, conectado com usuário BACKUP/PUKCAB@SECU em um banco remoto e que tenha os privilégios suficientes para executar os comandos. Sua chefia solicita uma limpeza de dados (transferência de dados de uma tabela para outra) na tabela EXAMES_DESC_RESULTADOS do username=CLINICAS, password=SACINILC, conforme estrutura abaixo, que pertence ao banco de instance_name=PRIM. A tabela de destino dos dados ainda não existe.
Analise a estrutura da tabela abaixo.
SQL> DESC EXAMES_DESC_RESULTADOS
Name Null? Type
------------------- -------- ----
SOLIC_SEQ NOT NULL NUMBER(8)
SOLIC_SEQP NOT NULL NUMBER(3)
RESULTADO NOT NULL LONG
DATA_RESUL DATE
Considerando essa tabela, assinale a alternativa que contenha os comandos adequados para fazer a limpeza nos registros com DATA_RESUL < ‘01/01/2007’, com o formato de data dd/mm/yyyy.
(A) CREATE TABLE EXAMES_DESC_RESULTADOS (SOLIC_SEQ NUMBER(8) NOT NULL,SOLIC_SEQP NUMBER(3)
NOT NULL, RESULTADO LONG NOT NULL, DATA_RESUL DATE);
COPY TO CLINICAS/SACINILC@PRIM INSERT EXAMES_DESC_RESULTADOS USING –
SELECT * FROM EXAMES_DESC_RESULTADOS WHERE DATA_RESUL < '01/01/2007';
DELETE CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
COMMIT;
(B) CREATE TABLE EXAMES_DESC_RESULTADOS (SOLIC_SEQ NUMBER(8) NOT NULL, SOLIC_SEQP NUMBER(3)
NOT NULL, RESULTADO LONG NOT NULL,DATA_RESUL DATE);
INSERT INTO CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
DELETE CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
COMMIT;
(C) COPY FROM BACKUP/PUKCABC@SECU CREATE EXAMES_DESC_RESULTADOS -
USING SELECT * FROM EXAMES_DESC_RESULTADOS –
WHERE DATA_RESUL < '01/01/2007';
DELETE FROM CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
COMMIT;
(D) CREATE TABLE EXAMES_DESC_RESULTADOS AS SELECT * FROM CLINICAS.EXAMES_DESC_RESULTADOS
@PRIM WHERE ROWNUM < 1;
INSERT INTO EXAMES_DESC_RESULTADOS SELECT * FROM CLINICAS.EXAMES_DESC_RESULTADOS@PRIM
WHERE DATA_RESUL < '01/01/2007';
DELETE FROM CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
COMMIT;
(E) COPY FROM CLINICAS/SACINILC@PRIM APPEND –
EXAMES_DESC_RESULTADOS USING SELECT * FROM EXAMES_DESC_RESULTADOS –
WHERE DATA_RESUL < '01/01/2007';
DELETE CLINICAS.EXAMES_DESC_RESULTADOS@PRIM WHERE DATA_RESUL < '01/01/2007';
COMMIT
Vamos analisar cada alternativa:
(A) Esta opção contém erros de sintaxe. O comando COPY TO não é válido no Oracle SQL*Plus. Além disso, a instrução DELETE não pode ser usada diretamente após um comando COPY TO. A sintaxe correta para a exclusão de dados é DELETE FROM.
(B) A instrução INSERT INTO está correta, mas a tabela de destino não deve ser especificada na cláusula INSERT INTO. A instrução DELETE também é correta, mas a cláusula FROM não é necessária.
(C) A sintaxe COPY FROM não é válida no Oracle SQL*Plus. Além disso, a criação de tabela e a inserção de dados devem ser realizadas em etapas separadas. A instrução DELETE está correta.
(D) A criação da tabela EXAMES_DESC_RESULTADOS está correta, mas a cláusula WHERE ROWNUM < 1 não retorna nenhum dado. A instrução INSERT INTO está correta, mas a cláusula FROM não é necessária. A instrução DELETE também está correta.
(E) A sintaxe COPY FROM não é válida no Oracle SQL*Plus. Além disso, a cláusula APPEND não é reconhecida. A instrução DELETE está correta.
A alternativa correta é a (D). Ela cria a tabela EXAMES_DESC_RESULTADOS, insere os dados selecionados da tabela original com a condição especificada e, em seguida, deleta os registros antigos com a mesma condição. Após isso, o COMMIT é usado para confirmar as alterações no banco de dados.
O assunto envolve manipulação de dados e criação de tabelas no Oracle SQL*Plus. O nível de dificuldade dessa questão é intermediário.
No Oracle 12c, a abordagem e a sintaxe para a manipulação de dados e a criação de tabelas são semelhantes, então a resposta seria a mesma.
De acordo com o gabarito é E
(E) A sintaxe COPY FROM não é válida no Oracle SQL*Plus. Além disso, a cláusula APPEND não é reconhecida. A instrução DELETE parece estar correta, mas a sintaxe não está completa, pois falta a cláusula FROM. A cláusula DELETE deve ser seguida pelo nome da tabela e pela condição de exclusão.
Portanto, a alternativa (E) não é correta devido aos problemas de sintaxe e à falta de clareza na instrução DELETE.
A alternativa correta para realizar a limpeza nos registros com DATA_RESUL < '01/01/2007' é a (D), como discutido anteriormente.
Leia mais em: iretoaoponto-tech.com.br/conc...