DB2 - Banco de dados - View - www.cadcobol.com.br
Você pode criar visualizações em tabelas individuais quando precisar limitar o acesso a colunas específicas. Suponha que você deseja criar uma exibição (view) na tabela DEPT. Das quatro colunas da tabela, a exibição (view) precisa apenas de três: DEPTNO, DEPTNAME e MGRNO.
CREATE VIEW MYVIEW AS SELECT DEPTNO , DEPTNAME , MGRNO FROM DEPT;
No exemplo anterior, nenhuma lista de colunas segue o nome da exibição, MYVIEW. Portanto, as colunas da exibição têm os mesmos nomes que os da tabela DEPT na qual ela se baseia. SELECT * FROM MYVIEW; A tabela de resultados fica assim: DEPTNO DEPTNAME MGRNO ====== ===================== ====== A00 CHAIRMANS OFFICE 000010 B01 PLANNING 000020 C01 INFORMATION CENTER 000030 D11 MANUFACTURING SYSTEMS 000060 E21 SOFTWARE SUPPORT ------
SELECT * FROM MYVIEW; A tabela de resultados fica assim: DEPTNO DEPTNAME MGRNO ====== ===================== ====== A00 CHAIRMANS OFFICE 000010 B01 PLANNING 000020 C01 INFORMATION CENTER 000030 D11 MANUFACTURING SYSTEMS 000060 E21 SOFTWARE SUPPORT ------
Você pode criar uma exibição (view) que contenha uma união de mais de uma tabela. Uma união de mais de uma tabela é chamada de junção. O DB2 fornece dois tipos de junções - uma junção externa e uma junção interna. Uma junção externa inclui linhas nas quais os valores nas colunas de junção não coincidem e linhas nas quais os valores coincidem. Uma junção interna inclui apenas linhas nas quais os valores correspondentes nas colunas de junção são retornados. O exemplo a seguir é uma junção interna de colunas das tabelas DEPT e EMP. A cláusula WHERE limita a visualização apenas àquelas colunas nas quais o MGRNO na tabela DEPT corresponde ao EMPNO na tabela EMP:
CREATE VIEW MYVIEW AS SELECT DEPTNO , MGRNO , LASTNAME , ADMRDEPT FROM DEPT , EMP WHERE EMP.EMPNO = DEPT.MGRNO;
O resultado da execução dessa instrução CREATE VIEW é uma visualização de junção interna de duas tabelas, mostrada abaixo:
DEPTNO MGRNO LASTNAME ADMRDEPT ====== ====== ======== ======== A00 000010 HAAS A00 B01 000020 THOMPSON A00 C01 000030 KWAN A00 D11 000060 STERN D11
Suponha que você deseje criar a exibição no exemplo anterior, mas deseje incluir apenas os departamentos que reportam ao departamento A00. Suponha também que você prefira usar um conjunto diferente de nomes de colunas. Use a seguinte instrução CREATE VIEW:
CREATE VIEW MYVIEWA00 ( DEPARTMENT , MANAGER , EMPLOYEE_NAME , REPORT_TO_NAME ) AS SELECT DEPTNO , MGRNO , LASTNAME , ADMRDEPT FROM EMP , DEPT WHERE EMP.EMPNO = DEPT.MGRNO AND ADMRDEPT = 'A00';
Você pode executar a seguinte instrução SELECT para ver o conteúdo da exibição:
SELECT * FROM MYVIEWA00;
Quando você executa esta instrução SELECT, o resultado é uma visualização de um subconjunto dos mesmos dados, mas com nomes de colunas diferentes, da seguinte maneira:
DEPARTMENT MANAGER EMPLOYEE_NAME REPORT_TO_NAME ========== ======= ============= ============== A00 000010 HAAS A00 B01 000020 THOMPSON A00 C01 000030 KWAN A00
SELECT SEQNO , TEXT FROM SYSIBM.SYSVIEWS WHERE CREATOR LIKE '%CAD%' AND NAME = 'CADVW001_UNIDADE' ORDER BY NAME , SEQNO Resultado da pesquisa acima: SEQNO TEXT ------ --------------------------------------------------------------------- 1 CREATE VIEW CAD.CADVW001_UNIDADE (NU_UNIDADE, NU_NATURAL , NU_DV_UNID 2 CEP , NU_CEP_COMPLEM, SG_UF , NU_LOCALIDADE, IC_ULT_SITUAC, DT_INICIO 3 LO_POSICAO, NO_BAIRRO , NO_TIPO_LOGRADOURO, NO_LOGRADOURO , SG_POSICA 4 _INICIO , TUNID.DT_FIM, TUNID.SG_TIPO_UNIDADE, TVINC.NU_UNDE_VNCLRA_U 5 RO , NO_LOGRADOURO , SG_POSICAO_DTRME , ED_POSICAO_DTRME , SG_TIPO_ED 6 E FROM CAD.CADTBU24_UNIDADE TU24 , CAD.CADTBV03_LOCUNID TV03 , CAD.IC 7 ATURAL AND TV03.NU_TIPO_FNLDE_V04 = TV04.NU_TIPO_FINALIDADE AND TV04. 8 AS TUNID LEFT OUTER JOIN (SELECT NU_UNDE_VNCLRA_U24, NU_NTRL_VNCLRA_U 9 AND TUNID.NU_NATURAL = TVINC.NU_NTRL_VNCLA_U24
SELECT NAME , SEQNO , TEXT FROM SYSIBM.SYSVIEWS WHERE CREATOR LIKE '%CAD%' ORDER BY NAME , SEQNO Resultado da pesquisa acima: NAME SEQNO TEXT ------------------ ------ ------------------------------------------------- CADVW001_UNIDADE 1 CREATE VIEW CAD.CADVW001_UNIDADE (NU_UNIDADE, NU_ CADVW001_UNIDADE 2 CEP , NU_CEP_COMPLEM, SG_UF , NU_LOCALIDADE, IC_U CADVW001_UNIDADE 3 LO_POSICAO, NO_BAIRRO , NO_TIPO_LOGRADOURO, NO_LO CADVW001_UNIDADE 4 _INICIO , TUNID.DT_FIM, TUNID.SG_TIPO_UNIDADE, TV CADVW001_UNIDADE 5 RO , NO_LOGRADOURO , SG_POSICAO_DTRME , ED_POSICA CADVW001_UNIDADE 6 E FROM CAD.CADTBU24_UNIDADE TU24 , CAD.CADTBV03_L CADVW001_UNIDADE 7 ATURAL AND TV03.NU_TIPO_FNLDE_V04 = TV04.NU_TIPO_ CADVW001_UNIDADE 8 AS TUNID LEFT OUTER JOIN (SELECT NU_UNDE_VNCLRA_U CADVW001_UNIDADE 9 AND TUNID.NU_NATURAL = TVINC.NU_NTRL_VNCLA_U24 CADVW002_PV_GIAFI 1 CREATE VIEW CAD.CADVW002_PV_GIAFI CADVW002_PV_GIAFI 2 AO, NU_LOCALIDADE, SG_UF ) AS CADVW002_PV_GIAFI 3 T25A.NU_SEQUENCIAL, T24A.NU_DV_NU_UNIDADE, CADVW002_PV_GIAFI 4 25A.DT_FIM IS NULL AND T24A.DT_F CADVW002_PV_GIAFI 5 8 AND T24A.NU_TP_UNIDADE_U21 IN (8, 9, 10, 20) CADVW002_PV_GIAFI 6 DT_FIM IS NULL AND T25B.NU_PROCE CADVW002_PV_GIAFI 7 5A.NU_UNDE_VNCLA_U24 = T25B.NU_UNDE_VNCLA_U24 AND CADVW002_PV_GIAFI 8 AND T24A.NU_TP_UNIDAD