Русская Википедия: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

См. также

Библиография

Источники

Эта статья частично или полностью была взята из статьи Википедии, озаглавленной «Object-PL/SQL».

Примечания

Шаблон:Примечания

Внешние источники

Шаблон:Изолированная статья