Showing posts with label plsql. Show all posts
Showing posts with label plsql. Show all posts

Tuesday, October 26, 2010

unable to see package body on sqldeveloper - SOLVED

Solução :

grants :

GRANT EXECUTE ON  DBMS_METADATA TO user_unable_to_see ;
GRANT CREATE ANY PROCEDURE TO  user_unable_to_see;

Cabe analisar a segurança ao conceder os privilégios acima.

Oks?!!

Julio Cesar Correa

Wednesday, September 22, 2010

PL/SQL - wrapping/obfuscating objects


Preciso escrever um post um pouco mais detalhado,mas por hoje vou deixar algumas linha de código por aqui.Acho que deve ajudar.

A palavra "Wrap" tem alguns significados dentre eles embrulhar ou envolver algo ,normalmente para protegê-lo.
No nosso caso iremos proteger nosso codigo.

Pois bem " wrapping" é diferente de "encrypting" .Uma vez tendo um wrapped object você não consegue mais desfaze-lo* .
Para trabalhar com criptografia existem outros pacotes no Oracle que não iremos entrar em detalhe agora,mas se você procura por isso pode encontrar alguns detalhes em :

Usando wrap utility :

Tenho um arquivo ".sql" que contem o codigo da minha procedure em pl/sql.

$ ls |grep my_p
my_proc.sql
jccorrea|arvato28 ~/Documents
$
jccorrea|arvato28 ~/Documents
$ wrap iname=my_proc.sql

PL/SQL Wrapper: Release 11.2.0.1.0- Production on Thu Sep 23 19:01:15 2010

Copyright (c) 1993, 2009, Oracle. All rights reserved.

Processing my_proc.sql to my_proc.plb
jccorrea|arvato28 ~/Documents
$ more my_proc.plb
CREATE OR REPLACE PROCEDURE my_procfoo wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
43 79
If0FucdLbueE4p3U0uRQWu+lr9Awg5nnm7+fMr2ywFyFO1+WFpeu3NlywcB0iwlp523+mYFc
pdKZUjK/ssKLwMAy/tLWmboxxXXFVMe+kr5UgqampybzvA==

/
jccorrea|arvato28 ~/Documents
$

Feito isso você pode rodar o arquivo my_proc.plb para criar a procedure.

Usando a package DBMS_DDL

Usando a package dbms_ddl podemos usar o objeto create_wrapped para fazer a mesma coisa que fizemos acima :

SQL> declare
my_ddl varchar2(150) ;
begin
my_ddl := 'create or replace procedure my_procfoo as v_num integer; begin v_num := 5 ; end;' ;
dbms_ddl.create_wrapped(my_ddl);
end ; 2 3 4 5 6
7 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> select TEXT
from all_source
where name = 'MY_PROCFOO'
and type = 'PROCEDURE' 2 3 4
5 /

TEXT
--------------------------------------------------------------------------------
procedure my_procfoo wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd

TEXT
--------------------------------------------------------------------------------
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
3f 75
IpCGLNo/BDIha28AwTNsfGHp6Cgwg5nnm7+fMr2ywFyFO1+WFpeu3Nly6rh0K+dt/pmBXKXS
mVIyv7LCK7jAMv7S1p6jMcV1xVTVU5K+VIKmphHX89g=

TEXT
--------------------------------------------------------------------------------


Elapsed: 00:00:00.06
SQL>

Em um próximo post trateremos o assunto de criptografia !

Abs,

JC

/
jccorrea|arvato28 ~/Documents
$

Feito isso você pode rodar o arquivo my_proc.plb para criar a procedure.


















Monday, January 11, 2010

Object Tables - Exemplos usando Oracle 10gR2(10.2.0.4)

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

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