As questões 12 e 13 baseiam-se nesse texto introdutório, assim como o constante nas Figuras 5(a), 5(b) e 5(c). Sabe-se que a empresa "XYZ Transportes Ltda" possui um SGBD Oracle 11g onde são armazenados os dados de seus sistemas. Na base de dados desse SGBD, o Administrador de Banco de Dados (DBA) criou as tablespaces "TS_DADOS" e "TS_INDICES", sendo esta última destinada, especificamente, para armazenar apenas dados de índices. A Figura 5(a) exibe as declarações SQL que permitiram criar e alterar, no banco de dados Oracle 11g, as tabelas "TB_PESSOA" e "TB_DOCUMENTO", nas quais estão armazenados dados de clientes, fornecedores e notas fiscais de entrada e saída da referida empresa. Sobre a Figura 5(b), considere os seguintes aspectos: (1) ela exibe, intencionalmente, apenas, um trecho de código, escrito em PL/SQL, contendo uma consulta SQL; (2) a consulta existente nesse código foi executada sobre uma das tabelas da Figura 5(a); e (3) esse trecho de código apresenta problemas de desempenho, ao ser executado no banco de dados referenciado nessa questão. A Figura 5(c) exibe a janela do Oracle SQL*Plus, que mostra, intencionalmente, apenas parte do Plano de Execução, que passou a ser exibido após se ter realizado ajuste na tabela "TB_DOCUMENTO" e executado determinada declaração nessa janela.
| CREATE TABLE TB_PESSOA( CO_PESSOA NUMBER(10) NOT NULL, NO_PESSOA VARCHAR2(100) NOT NULL, NU_CNPJ_CPF VARCHAR2(14), ST_CLIENTE CHAR(1) NOT NULL, ST_FORNECEDOR CHAR(1) NOT NULL); ALTER TABLE TB_PESSOA ADD CONSTRAINT PK_PES PRIMARY KEY(CO_PESSOA) USING INDEX TABLESPACE TS_INDICES; COMMENT ON COLUMN TB_PESSOA.CO_PESSOA IS 'Chave primária da tabela TB_PESSOA'; CREATE TABLE TB_DOCUMENTO( NU_DOCUMENTO VARCHAR2(10) NOT NULL, CO_PESSOA NUMBER(10) NOT NULL, TP_PAGAMENTO CHAR(1) NOT NULL, QT_PARCELAS NUMBER(2), VL_DOCUMENTO NUMBER(14,2)); ALTER TABLE TB_DOCUMENTO ADD CONSTRAINT FK_PES_DOC FOREIGN KEY(CO_PESSOA) REFERENCES TB_PESSOA(CO_PESSOA); COMMENT ON COLUMN TB_DOCUMENTO.NU_DOCUMENTO IS 'Chave primária da tabela TB_DOCUMENTO'; |
Figura 5(a) - Declarações SQL executadas em um banco de dados Oracle 11g
| DECLARE X TB_PESSOA.CO_PESSOA%TYPE; BEGIN X:= P_CODIGO_CLIENTE; EXECUTE IMMEDIATE 'SELECT SUM(NVL(VL_DOCUMENTO,0)) ' || 'INTO : P_TOTAL ' || 'FROM TB_DOCUMENTO ' || 'WHERE CO_PESSOA = ' || TO_CHAR(X) INTO V_TOTAL_CLIENTE; END; |
Figura 5(b) - Trecho de código, em PL/SQL

Figura 5(c) - Parte do Plano de Execução, visto após ajustes na tabela "TB_DOCUMENTO"
O DBA da empresa "XYZ Transportes Ltda" executou, no banco de dados Oracle 11g, o código PL/SQL, exibido na Figura 5(b), retirado de uma procedure do módulo financeiro. Ao executar tal código, verificou que o mesmo apresentava problemas de desempenho. Para resolver esse problema, o DBA procedeu da seguinte forma: (1) criou um índice na tabela "TB_DOCUMENTO"; e (2) executou, no Oracle SQL*Plus, determinada declaração SQL, cuja parte do Plano de Execução é mostrado na Figura 5(c). Nesse caso, pode-se afirmar que, para se obter o resultado da Figura 5(c), bastou, antes, executar, no Oracle SQL*Plus, a seguinte declaração:
I. CREATE INDEX IX_DOC_COPESSOA ON TB_DOCUMENTO(CO_PESSOA) TABLESPACE TS_INDICES;
II. CREATE INDEX IX_DOC_COPESSOA ON TB_DOCUMENTO(CO_PESSOA) USING INDEX TABLESPACE TS_INDICES;
III. CREATE INDEX IX_DOC_COPESSOA ON TB_DOCUMENTO(CO_PESSOA);
IV. CREATE INDEX IX_DOC_COPESSOA ON TB_DOCUMENTO(CO_PESSOA) TABLESPACE TS_DADOS;
Quais estão corretas?