| 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"
Ao analisar o código, em PL/SQL, mostrado na Figura 5(b), o DBA resolveu otimizar esse código, sem alterar o resultado dessa consulta.
Assinale, dentre as alternativas abaixo, a opção que apresenta a melhor otimização na execução da consulta em questão, considerando que, atualmente, a tabela "TB_PESSOA" possui um milhão de registros e a tabela "TB_DOCUMENTO" possui cem mil registros.