Skip to main content

Quiz A4Q1

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 DEPARTMENTS_OBJ com a mesma estrutura da tabela relacional DEPARTMENTS, ou seja, os atributos do primeiro devem corresponder as colunas do segundo. Para visualizar a estrutura de DEPARTMENTS basta usar o comando DESCRIBE.

CREATE OR REPLACE TYPE DEPARTMENTS_OBJ AS OBJECT (
    DEPARTMENT_ID NUMBER(22),
    DEPARTMENT_NAME VARCHAR2(30),
    MANAGER_ID NUMBER(22),
    LOCATION_ID NUMBER(22)
);

(b) Cria uma Object_Table chamada DEPARTMENTS_TAB usando como molde o Object Type DEPARTMENTS_OBJ. O atributo department_id deve corresponder a uma chave primária em DEPARTMENTS_TAB.

CREATE TABLE DEPARTMENTS_TAB OF DEPARTMENTS_OBJ;

(c) Usando o comando INSERT INTO...SELECT..., copie as linhas da tabela relacional DEPARTMENTS para a Object Table DEPARTMENTS_TAB.

INSERT INTO DEPARTMENTS_TAB SELECT * FROM OEHR_DEPARTMENTS;

(d) Modifique o Object Type DEPARTMENTS_OBJ para adicionar e implementar o método conta_dep o qual deve ser capaz de retornar a quantidade de departamentos (objetos) armazenados em DEPARTMENTS_TAB que contém NULO no atributo manager_id. O aluno deve ser capaz de identificar qual deve ser o tipo do método conta_dep.

CREATE OR REPLACE TYPE DEPARTMENTS_OBJ AS OBJECT (
    DEPARTMENT_ID NUMBER(22),
    DEPARTMENT_NAME VARCHAR2(30),
    MANAGER_ID NUMBER(22),
    LOCATION_ID NUMBER(22),
    MAP MEMBER FUNCTION conta_dep RETURN NUMBER
);

CREATE OR REPLACE TYPE BODY DEPARTMENTS_OBJ AS
    MAP MEMBER FUNCTION conta_dep RETURN NUMBER IS
        v_count NUMBER(22);
    BEGIN
        SELECT COUNT(*) INTO v_count FROM DEPARTMENTS_TAB WHERE MANAGER_ID IS NULL;
        RETURN v_count;
    END;
END;

(e) Execute o método conta_dep e mostre o resultado. Dica: chame o método conta_dep a partir de uma consulta à tabela DUAL.

SELECT tab.conta_dep()
FROM DEPARTMENTS_TAB tab;