Object-PL/SQL

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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.

Exemplos de usos da sintaxe da O-PL/SQL[editar | editar código-fonte]

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

Exemplo 1[editar | editar código-fonte]

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

Exemplo 2[editar | editar código-fonte]

Outro exemplo, agora de stored procedure em java embutido, também da Oracle Documentation[13]

Bibliografia[editar | editar código-fonte]

Ver também[editar | editar código-fonte]

Referências

  1. Lassan, Alan R., Due, Jacob Steen (13 de junho de 2000). Experiences with Object Oriented Development in PL/SQL. The danish National Center for IT Research. Página visitada em 15 de abril de 2012.
  2. Cunningham, Lewis. PL/SQL Features by Release. Burleson Consulting. Página visitada em 15 de abril de 2012.
  3. When Should you use Java Stored Procedures with an Oracle Database, what are the Drawbacks?. Stack Overflow. Página visitada em 15 de abril de 2012.
  4. Oracle's Object-Oriented Features. etutorial.org. Página visitada 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. Página visitada em 19 de abril de 2012.
  7. Bales, 2007:107-209
  8. Use Object PL/SQL. java2s.com. Página visitada em 19 de abril de 2012.
  9. Feuerstein, 2009
  10. DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows. IBM. Página visitada em 20 de abril de 2012.
  11. Oracle Documentatio. Oracle. Página visitada em 19 de abril de 2012.
  12. Object Oriented Oracle, example 1. René Nyffenegger's collection of things on the web. Página visitada em 19 de abril de 2012.
  13. Calling Java Methods in Oracle Database. Oracle. Página visitada em 20 de abril de 2012.

Fontes externas[editar | editar código-fonte]

Nota[editar | editar código-fonte]

  • Este artigo foi elaborado a partir de tradução do artigo Object-PL/SQL, da Wikipédia em inglês, que se encontrava nesta versão.