Object-PL/SQLObject-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/SQLO-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 См. такжеБиблиография
Примечания
Внешние источники
|
Portal di Ensiklopedia Dunia