Object-PL/SQL

linguagem de programação

Object-PL/SQL (Object-Procedural Language/Structured Query Language ou simplesmente O-PL/SQL) é uma metodologia de uso da linguagem procedural estendida SQL do Oracle.[1] Os itens adicionais a partir da versão 7 e outros upgrades levaram a um uso em larga escala deste banco de dados no paradigma orientado a objetos.[2]

Apesar de a sintaxe do PL/SQL ter sido inicialmente concebida semelhantemente à da Ada e à do Pascal, os avanços posteriores incluíram a possibilidade de uso do código java embutido[3] e de uma sintaxe orientada a objetos no próprio código SQL.[4]

A mixagem e uso embutido de triggers e stored procedures foi um dos pontos que levaram ao limiar da concepção do PL/SQL num paradigma OO.[5] Já a inclusão, na sintaxe SQL, de partículas no formato [classe].[objeto], bem como a implementação do objeto tipo (tipo de dado)[6] (como nas linguagens OO em geral) completou os mínimos requisitos para um mapeamento objeto-relacional numa linguagem SQL estendida sem uso de Persistence frameworks.[7]

Autonomia, notoriedade e importância do O-PL/SQL editar

A O-PSL/SQL não é somente uma versão da linguagem de programação, mas um modelo de como usá-la, que rompe totalmente com a prática anterior, o que define a autonomia do tema aqui tratado.[8] Cada versão da PL/SQL, a partir da 7, traz inovações que não podem ser tratadas como simples sub-temas da linguagem, caracterizando-se esse conjunto de mudanças como uma linguagem autônoma. Tal revolução estabelece uma fronteira entre a linguagem anterior, procedural-estruturada, e a atual, procedural-estruturada-OO. É justamente esta abordagem que confere importância ao tema e sua notoriedade é dada pelo seu uso cada vez maior.[9]

Confusão de objetos editar

Numa linguagem OO que tem como objetivo agir sobre um banco de dados, há dois conceitos diferentes chamados objeto, que não devem ser confundidos. Esta distinção é muito importante, já que ambas as significâncias são amplamente usadas. Assim, ao ler a documentação, é preciso fazer a identificação de qual definição é aplicável em cada referência ao termo.

Objetos de banco de dados são elementos que remontam ao modelo relacional ou ainda mais remotamente aos bancos de dados sequenciais e hierárquicos e que continuam presentes no banco de dados orientado a objetos. Tabelas, Triggers, colunas, índices são exemplos de alguns desses objetos,[6] que estão presentes na O-PL/SQL, e cujo valor pode coincidir com o de um objeto na noção java, mais especificamente um elemento de um conjunto (classe), cuja existência se inicia com a operação chamada instanciar.

PL/SQL e O-PL/SQL editar

 Ver artigo principal: PL/SQL

PL/SQL é a linguagem SQL estendida usada pelo banco de dados Oracle.

O-PL/SQL é disponível no Oracle desde a versão 7 e no IBM DB2 desde a versão 9.7.[10]

O-PL/SQL permite definição de classes e instanciar objetos, assim, criando tipos de dados definidos por usuário, bem como criando construtores, além das stored procedures e triggers em java embutido.

Exemplo de uso da sintaxe da O-PL/SQL editar

Um pequeno exemplo da sintaxe da O-PL/SQL, extraída da documentação[11], além de outras fontes:

Exemplo editar

Um exemplo simples de object-oriented PL/SQL[12]

create or replace type base_type as object (
  a number,
  constructor function base_type return self as result,
  member function  func return number,
  member procedure proc (n number)
) instantiable not final;
/

Agora, a implementação do tipo é criada. Esta implementação define como as funções do tipo e seus construtores explícitos funcionam:

create or replace type body base_type as 
  constructor function base_type return self as result is
  begin
    a:=0;
    return;
  end base_type;

  member function func return number is
  begin
    return a;
  end func;

  member procedure proc (n number) as
  begin
    a:=n;
  end proc;
end;
/

Estamos prontos para derivar o tipo-base. A palavra-chave para a derivação é under. O tipo derivado define um novo atributo (chamado m) e sobrescreve a função.

create or replace type deriv_type under base_type (
  m number,
  overriding member function func return number
);
/

Como nos casos de tipo-base, o método sobrescrito deve ser implementado no tipo derivado:

create or replace type body deriv_type as
  overriding member function func return number is
  begin
    return m*a;
  end;
end;
/

Os tipos criados podem ser instanciados e os métodos podem ser chamados:

declare
  b1 base_type :=base_type();
  b2 base_type :=base_type(4);
  d1 deriv_type:=deriv_type(5,6);
  d2 deriv_type:=deriv_type(5,6);
begin
  dbms_output.put_line(b1.func);
  dbms_output.put_line(b2.func);

  d1.proc(4);
  dbms_output.put_line(d1.func);
  dbms_output.put_line(d2.func);
end;
/

Resultados:

  • 0
  • 4
  • 24
  • 30

Os tipos criados se tornam tipos reais e podem ser usados em tabelas:

create table table_base (
  b base_type
);
declare
  base  base_type := base_type();
  deriv deriv_type:= deriv_type(8,9);
begin
  insert into table_base values(base);
  insert into table_base values(deriv);
end;
/
select t.b.func() from table_base t;
T.B.FUNC()

Resultados:

  • 0
  • 72
select avg(t.b.func()) from table_base t;
AVG(T.B.FUNC())

Resultado:

  • 36

Bibliografia editar

Ver também editar

Referências

  1. Lassan, Alan R., Due, Jacob Steen (13 de junho de 2000). «Experiences with Object Oriented Development in PL/SQL» (PDF). The danish National Center for IT Research. Consultado em 15 de abril de 2012 
  2. Cunningham, Lewis. «PL/SQL Features by Release». Burleson Consulting. Consultado em 15 de abril de 2012 
  3. «When Should you use Java Stored Procedures with an Oracle Database, what are the Drawbacks?». Stack Overflow. Consultado em 15 de abril de 2012 
  4. «Oracle's Object-Oriented Features». etutorial.org. Consultado em 16 de abril de 2012 
  5. Benett, 2002:144
  6. a b Shubho, Al-Farooque (8 de novembro de 2009). «Optimize Database Files and Apply Partitioning». The Code Project. Consultado em 19 de abril de 2012 
  7. Bales, 2007:107-209
  8. «Use Object PL/SQL». java2s.com. Consultado em 19 de abril de 2012 
  9. Feuerstein, 2009
  10. «DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows». IBM. Consultado em 20 de abril de 2012 
  11. «Oracle Documentatio». Oracle. Consultado em 19 de abril de 2012 
  12. «Object Oriented Oracle, example 1». René Nyffenegger's collection of things on the web. Consultado em 19 de abril de 2012 

Nota editar

Ligações externas editar