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
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
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
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
Um pequeno exemplo da sintaxe da O-PL/SQL, extraída da documentação[11], além de outras fontes:
Exemplo
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:
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:
select avg(t.b.func()) from table_base t;
AVG(T.B.FUNC())
Resultado:
Bibliografia
Ver também
Referências
- ↑ 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
- ↑ Cunningham, Lewis. «PL/SQL Features by Release». Burleson Consulting. Consultado em 15 de abril de 2012
- ↑ «When Should you use Java Stored Procedures with an Oracle Database, what are the Drawbacks?». Stack Overflow. Consultado em 15 de abril de 2012
- ↑ «Oracle's Object-Oriented Features». etutorial.org. Consultado em 16 de abril de 2012
- ↑ Benett, 2002:144
- ↑ 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
- ↑ Bales, 2007:107-209
- ↑ «Use Object PL/SQL». java2s.com. Consultado em 19 de abril de 2012
- ↑ Feuerstein, 2009
- ↑ «DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows». IBM. Consultado em 20 de abril de 2012
- ↑ «Oracle Documentatio». Oracle. Consultado em 19 de abril de 2012
- ↑ «Object Oriented Oracle, example 1». René Nyffenegger's collection of things on the web. Consultado em 19 de abril de 2012
Nota
- Este artigo foi inicialmente traduzido, total ou parcialmente, do artigo da Wikipédia em inglês cujo título é «Object-PL/SQL», especificamente desta versão.
Ligações externas