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