Skip to main content

Quiz A3Q1

Usando seu usuário do Oracle Apex criado anteriormente, mostre todos os comandos usados para executar as solicitações abaixo, bem como o resultado de cada comando. Somente serão aceitas respostas inseridas pelo Moodle.

(a) Crie um Object Type chamado TELEFONE_OBJ_TYPE com os seguintes atributos: pais CHAR(3), ddd CHAR(2) e numero CHAR(9).

CREATE OR REPLACE TYPE TELEFONE_OBJ_TYPE AS OBJECT (
    pais CHAR(3),
    ddd CHAR(2),
    numero CHAR(9)
);

(b) Crie um Object Type chamado ENDERECO_OBJ_TYPE com os seguintes atributos: rua VARCHAR2(20), numero VARCHAR2(5), complemento VARCHAR2(10), bairro VARCHAR2(20), cidade VARCHAR2(20) e estado CHAR(2).

CREATE OR REPLACE TYPE ENDERECO_OBJ_TYPE AS OBJECT (
    rua VARCHAR2(20),
    numero VARCHAR2(5),
    complemento VARCHAR2(10),
    bairro VARCHAR2(20),
    cidade VARCHAR2(20),
    estado CHAR(2)
);

(c) Crie um Object Type chamado CONTRIBUINTE_OBJ_TYPE com os seguintes atributos: cpf VARCHAR2(11), nome VARCHAR2(30), nascimento DATE, telefone TELEFONE_OBJ_TYPE e endereco ENDERECO_OBJ_TYPE.

CREATE OR REPLACE TYPE CONTRIBUINTE_OBJ_TYPE AS OBJECT (
    cpf VARCHAR2(11),
    nome VARCHAR2(30),
    nascimento DATE,
    telefone TELEFONE_OBJ_TYPE,
    endereco ENDERECO_OBJ_TYPE
);

Aqui temos a composição de objetos, onde um objeto pode ser composto por outros objetos.

(d) Use o Object Type CONTRIBUINTE_OBJ_TYPE como molde para criar uma Object Table chamada CONTRIBUINTE_OBJ_TAB.

CREATE TABLE CONTRIBUINTE_OBJ_TAB OF CONTRIBUINTE_OBJ_TYPE;

(e) Visualize a estrutura da Object Table CONTRIBUINTE_OBJ_TAB.

DESCRIBE CONTRIBUINTE_OBJ_TAB;

(f) Usando o método construtor, insira duas linhas (Object Rows) na Object Table CONTRIBUINTE_OBJ_TAB. Use dados fictícios de sua escolha.

INSERT INTO CONTRIBUINTE_OBJ_TAB
VALUES (
    CONTRIBUINTE_OBJ_TYPE(
        '12345678901',
        'José',
        TO_DATE('01/01/2000', 'DD/MM/YYYY'),
        TELEFONE_OBJ_TYPE(
            '55',
            '83',
            '987654321'
        ),
        ENDERECO_OBJ_TYPE(
            'Rua 1',
            '123',
            'Apto 1',
            'Bairro 1',
            'Cidade 1',
            'PB'
        )
    )
);

INSERT INTO CONTRIBUINTE_OBJ_TAB
VALUES (
    CONTRIBUINTE_OBJ_TYPE(
        '98765432101',
        'Maria',
        TO_DATE('01/01/2000', 'DD/MM/YYYY'),
        TELEFONE_OBJ_TYPE(
            '55',
            '83',
            '123456789'
        ),
        ENDERECO_OBJ_TYPE(
            'Rua 2',
            '321',
            'Apto 2',
            'Bairro 2',
            'Cidade 2',
            'PB'
        )
    )
);

(g) Adicione um método chamado format_phone ao Object Type CONTRIBUINTE_OBJ_TYPE para retornar o número de telefone formatado de um determinado objeto. O aluno deve ser capaz de escolher o tipo do método apropriado bem como se o mesmo deve ser implementado como função ou procedure. O formato esperado de número de telefone é +55 (83) 98754-8276. Quando necessário, procure na documentação do Oracle por funções que lidam com dados textuais.

CREATE OR REPLACE TYPE CONTRIBUINTE_OBJ_TYPE AS OBJECT (
    cpf VARCHAR2(11),
    nome VARCHAR2(30),
    nascimento DATE,
    telefone TELEFONE_OBJ_TYPE,
    endereco ENDERECO_OBJ_TYPE,
    MAP MEMBER FUNCTION format_phone RETURN VARCHAR2
);

CREATE OR REPLACE TYPE BODY CONTRIBUINTE_OBJ_TYPE AS
    MEMBER FUNCTION format_phone RETURN VARCHAR2 IS
        formated_phone VARCHAR2(20);
    BEGIN
        formated_phone := '+' || self.telefone.pais || ' (' || self.telefone.ddd || ') ' || self.telefone.numero;
        RETURN formated_phone;
    END;
END;

(h) Escreva um comando SELECT sobre a tabela CONTRIBUINTE_OBJ_TAB para chamar o método criado na questão anterior e mostrar na tela o número do telefone formatado de todos os contribuintes.

SELECT c.format_phone() AS formated_phone
FROM CONTRIBUINTE_OBJ_TAB c;