Русская Википедия:Object-PL/SQL
Object-PL/SQL (объектно-процедурный язык / структурированный язык запросов или просто O-PL/SQL) является методологией использования процедурного языка расширения Oracle для SQL и реляционной базы данных Oracle.[1] Дополнительные возможности из версии 7 и другие улучшения приводят к одной из широкомасштабных реализаций среды объектно-ориентированной парадигмы базы данных.[2]
Несмотря на то, что общий синтаксис PL/SQL, ранее использовался для того, чтобы иметь сходство с Ada или Pascal, в нём было много улучшений, которые в основном включают код внедрения Java[3] и объектно-ориентированный синтаксис[4] внутри SQL.
Смешивание и внедрение триггеров и хранимых процедур было одним из прорывных пунктов, чтобы поддержать использование PL/SQL в ОО парадигме. Включение в синтаксис SQL таких операторов, как [класс].[объект] и реализация типа объекта (как и любой ОО язык), завершило минимальные требования к отображению подхода на расширенном языке SQL без использования специфического отображаемого программного обеспечения.
Автономия, известность и важность O-PL/SQL
O-PL/SQL — это не просто использование версии языка программирования, а определение того, как его использовать, и это определяет автономию предмета.[5] Каждая версия PL/SQL, начиная с 7, приносит так много инноваций, что невозможно рассматривать такие употребления как подтемы PL/SQL. Настолько велика эта революция, что она устанавливает реальную границу между языком, который можно использовать как раньше, и подход ООП внутри себя. Именно этот подход делает тему важной, и широкомасштабное использование принесло свою известность.
Путаница объектов
Может возникнуть путаница в понятиях объекта СУБД и объекта класса. Это очень важно, поскольку мы живем с обоими значениями на одном языке. Необходимо определить, когда документация относится к объекту как одно из двух определений.
Объекты базы данных — это концепции, которые относятся к реляционным или последовательным базам данных и сохраняются в новых моделях. Таблицы, триггеры, столбцы, индексы являются примерами объектов базы данных, которые присутствуют в O-PL/SQL, но с тем же значением понятия объектов Java, в частности, элементом набора, который существует, начиная с экземпляра класса.
PL/SQL
Основная статья: PL/SQL
PL/SQL — это расширенный язык SQL, используемый Oracle Database.
PL/SQL доступен в Oracle Database (начиная с версии 7), в базе данных TimesTen (начиная с версии 11.2.1) и IBM DB2 (начиная с версии 9.7).[6]
O-PL/SQL позволяет определять классы и создавать их как объекты, создавая определяемые пользователем типы данных как конструкторы записи, помимо использования Java в хранимых процедурах и триггерах.
Примеры использования синтаксиса O-PL/SQL
Вот небольшой набор примеров синтаксиса O-PL/SQL, извлеченный из официальной документации[7] и других источников:
Простой пример объектно-ориентированного PL/SQL[8]
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;
Теперь реализация типа создана. Реализация определяет, как ведут себя функции типа, процедуры и явный конструктор :
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;
Мы готовы вывести base_type. Ключевое слово для вывода — ниже. Производный тип определяет новый атрибут (названный m) и переопределяет func.
create or replace type deriv_type under base_type (
m number,
overriding member function func return number
);
Как и в случае с базовыми типами, переопределенные методы в производном типе должны быть реализованы:
create or replace type body deriv_type as
overriding member function func return number is
begin
return m*a;
end;
end;
/
Созданные типы могут быть созданы и методы могут быть вызваны:
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;
Результат:
0
4
24
30
Созданные типы стали реальными типами и могут использоваться в таблицах:
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;
Результат:
0
72
select avg(t.b.func()) from table_base t;
Результат:
36
См. также
Библиография
- Bennett, Mathew (2002). Programming Oracle Developer (1 ed.). Indianapolis: Sams. p. 348. ISBN 0672321106.
- Bales, Donals (2007). PL/SQL from Novice to Professional (1 ed.). New York: Apress. p. 469. ISBN 1590598822.
- Feuerstein, Steven; Pribyl, Bill (2009). «26». Oracle PL/SQL Programming Шаблон:Wayback. Sebastopol: O’Reilly Media, Inc. ISBN 9780596514464.
- Rahayu, Wenny; taniar, David; Pardede, Eric (2006). Object-Oriented Oracle (PDF). Hershey: IRM Press. p. 345. ISBN 1591406080.
Источники
Эта статья частично или полностью была взята из статьи Википедии, озаглавленной «Object-PL/SQL».
Примечания
Внешние источники
- Пример хранимой процедуры в Java, встроенной в Oracle Documentation: «Вызов методов Java в базе данных Oracle». Oracle.20 апреля 2012.