# Object-PL/SQL

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. 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.
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 e de uma sintaxe orientada a objetos no próprio código SQL.
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. 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) (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.

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

## 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, 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.
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, além de outras fontes:

### Exemplo

Um exemplo simples de object-oriented PL/SQL
Agora, a implementação do tipo é criada. Esta implementação define como as funções do tipo e seus construtores explícitos funcionam:
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.
Como nos casos de tipo-base, o método sobrescrito deve ser implementado no tipo derivado:
Os tipos criados podem ser instanciados e os métodos podem ser chamados:
Resultados:
* 0
* 4
* 24
* 30
Os tipos criados se tornam tipos reais e podem ser usados em tabelas:
Resultados:
* 0
* 72
Resultado:
* 36