Alguém já usou object tables no Oracle?
Vou mostrar alguns exemplos usando Oracle 10g.
Object table nada mais é que uma tabela criada com base em um tipo definido pelo usuário ou user-defined types um conceito bem conhecido das famosas Classes em Orientação a Objetos popular OO.
Desde a versão 8 do Oracle é possível trabalhar com OO nos códigos PL/SQL e armazenamento dentro do banco de dados.Da versão 8 até a versão atual 11g estas características foram melhoradas.Podemos trabalhar com conceito de classe,atributos e métodos bem como herança ,funções e contrutores dentre outras.   
    
Uma vez definido um TYPE podemos utilizá-los de várias formas e entre elas a de criar tabelas com base em tipos.
    
Criando um object type :
    
dbajcc@OCADB on 11-JAN-10 >create type t_dbf as object(file_name varchar2(50),tablespace_name varchar2(30));
2 /
Type created.
Elapsed: 00:00:00.38
    
Criando uma object table :
    
dbajcc@OCADB on 11-JAN-10 >create table tst_dbf_obj of t_dbf ;
Table created.
Elapsed: 00:00:00.70
  Uma vez definido um TYPE podemos utilizá-los de várias formas e entre elas a de criar tabelas com base em tipos.
Criando um object type :
dbajcc@OCADB on 11-JAN-10 >create type t_dbf as object(file_name varchar2(50),tablespace_name varchar2(30));
2 /
Type created.
Elapsed: 00:00:00.38
Criando uma object table :
dbajcc@OCADB on 11-JAN-10 >create table tst_dbf_obj of t_dbf ;
Table created.
Elapsed: 00:00:00.70
Inserindo dados em uma object table :
dbajcc@OCADB on 11-JAN-10 >insert into tst_dbf_obj select file_name,tablespace_name from dba_data_files ;
6 rows created.
Elapsed: 00:00:00.04
dbajcc@OCADB on 11-JAN-10 >commit;
Commit complete.
Elapsed: 00:00:00.02
dbajcc@OCADB on 11-JAN-10 >select * from tst_dbf_obj ;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ---------------
+DATA/ocadb/datafile/users.263.703360157 USERS
+DATA/ocadb/datafile/sysaux.259.703360021 SYSAUX
+DATA/ocadb/datafile/undotbs1.260.703360021 UNDOTBS1
+DATA/ocadb/datafile/system.257.703360021 SYSTEM
+DATA/ocadb/datafile/example.261.703360021 EXAMPLE
+DATA/ocadb/datafile/teste_rename.262.703360117 TESTE_RENAME
6 rows selected.
Elapsed: 00:00:00.01
Também é possível criar constraints em object tables tais como Primary Keys (PK's) e Check constraints .
  No exemplo abaixo vamos criar uma object table com uma coluna identificadora :
  dbajcc@OCADB on 11-JAN-10 >create type t_automovel as object (id number(2),nome varchar2(10),marca varchar2(15));
      2  /
    Type created.
    Elapsed: 00:00:00.05
    dbajcc@OCADB on 11-JAN-10 >
    dbajcc@OCADB on 11-JAN-10 >create table frota_taxi of t_automovel (id PRIMARY KEY)
        2  object identifier is primary key ;         
Table created.
      Table created.
Elapsed: 00:00:00.13
      dbajcc@OCADB on 11-JAN-10 >
      Você NÃO PODE excluir um TYPE caso exista um outro objeto definido com base nele :
      dbajcc@OCADB on 11-JAN-10 >drop type t_automovel ;
        drop type t_automovel
        *
        ERROR at line 1:
        ORA-02303: cannot drop or replace a type with type or table dependents
        Elapsed: 00:00:00.02
        Pirmeiro excluímos os dependentes e depois  eliminamos  o tipo:
        dbajcc@OCADB on 11-JAN-10 >drop table frota_taxi ;
          Table dropped.
          Elapsed: 00:00:00.81
          dbajcc@OCADB on 11-JAN-10 >drop type t_automovel ;
          Type dropped.
          Elapsed: 00:00:00.58
          dbajcc@OCADB on 11-JAN-10 >
          Podemos fazer o uso das object tables que possuem colunas que também  são objetc types   :
          dbajcc@OCADB on 11-JAN-10 >create type t_bolas_sena
            as object (first number(2),second number(2),third number(2),
                       fourth number(2),fifth number(2),sixth number(2)) ;
            /  2    3    4
            Type created.
            Elapsed: 00:00:00.06
            dbajcc@OCADB on 11-JAN-10 >
            --criar um objeto com os atributos de um resultado de jogo da mega sena
            dbajcc@OCADB on 11-JAN-10 
            create type t_resultado_sena
            as object( concurso number(4),
                       local_sorteio varchar2(50),
                        bolas_sena  t_bolas_sena ) ;
            /dbajcc@OCADB on 11-JAN-10 >dbajcc@OCADB on 11-JAN-10 >  2    3    4    5
            Type created.
            Elapsed: 00:00:00.05
            dbajcc@OCADB on 11-JAN-10 >
            --criação de uma object table que armazena o type  t_resultado_sena
            dbajcc@OCADB on 11-JAN-10 >
            create table tb_resultado_sena of t_resultado_sena ;
            /dbajcc@OCADB on 11-JAN-10 >dbajcc@OCADB on 11-JAN-10 >
            Table created.
            Elapsed: 00:00:00.05
            dbajcc@OCADB on 11-JAN-10 >insert into  tb_resultado_sena
          values(t_resultado_sena(1141,
                                   'TRAMANDAI/RS',
                       t_bolas_sena(09,37,40,50,58,60)
                                       )
                       ) ;  2    3    4    5    6
            1 row created.
            Elapsed: 00:00:00.01
            dbajcc@OCADB on 11-JAN-10 >insert into  tb_resultado_sena
            (concurso,local_sorteio,bolas_sena)
            values(1142,'PENEDO/AL',
                       t_bolas_sena(03,15,26,28,31,58)
                  ) ;  2    3    4    5
            1 row created.
            Elapsed: 00:00:00.00
            dbajcc@OCADB on 11-JAN-10 >
            dbajcc@OCADB on 11-JAN-10 >commit ;
            Commit complete.
            Elapsed: 00:00:00.01
            dbajcc@OCADB on 11-JAN-10 >
            dbajcc@OCADB on 11-JAN-10 >select * from tb_resultado_sena tbs where tbs.concurso = 1142 ;
                CONCURSO LOCAL_SORTEIO
              ---------- --------------------------------------------------
              BOLAS_SENA(FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH)
              ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    1142 PENEDO/AL
              T_BOLAS_SENA(3, 15, 26, 28, 31, 58)
              Elapsed: 00:00:00.03
              dbajcc@OCADB on 11-JAN-10 >select * from tb_resultado_sena ;
                  CONCURSO LOCAL_SORTEIO
                ---------- --------------------------------------------------
                BOLAS_SENA(FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH)
                ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                      1141 TRAMANDAI/RS
                T_BOLAS_SENA(9, 37, 40, 50, 58, 60)
                      1142 PENEDO/AL
                T_BOLAS_SENA(3, 15, 26, 28, 31, 58)
                Elapsed: 00:00:00.02
                Dúvidas ou sugestões ?Poste o seus comentários!
                Abs,
                Julio Cesar Correa
              
 
 

No comments:
Post a Comment