DB2 - Banco de dados - View - www.cadcobol.com.br


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

View
É uma visão lógica, permitindo a representação de dados de uma ou mais tabelas como sendo uma outra Tabela.

Nela podemos demonstrar determinadas linhas e colunas de uma ou mais tabelas.

Sua utilização em nada difere com a de uma tabela. 

Ao projetar seu banco de dados, pode ser necessário conceder aos usuários acesso apenas a determinadas partes de dados.
Você pode fornecer acesso controlado aos usuários projetando e usando visualizações (views).

Use a instrução CREATE VIEW para definir e nomear uma exibição (view).
A menos que você liste especificamente nomes de colunas diferentes após o nome da exibição, os nomes da coluna são os mesmos que os nomes da coluna da tabela subjacente.
Ao criar nomes de colunas diferentes para sua exibição, lembre-se das convenções de nomenclatura que você estabeleceu ao projetar o banco de dados relacional.

Uma instrução SELECT descreve as informações na exibição (view).
A instrução SELECT pode nomear outras visualizações (views) e tabelas (table) e pode usar as cláusulas WHERE, GROUP BY e HAVING.
Ele não pode usar a cláusula ORDER BY ou nomear uma variável de host.

Uma visão (view) de uma única tabela

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.

A ordem das colunas que você especifica na cláusula SELECT é a ordem em que elas aparecem na exibição:

   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          ------


Uma visão (view) que combina informações de várias tabelas

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


O SELECT abaixo mostra como é o CREATE de uma VIEW especifica:

    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


O SELECT abaixo mostra como é o CREATE das VIEW de um sistema:

   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