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

См. также

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

Примечания

  1. Lassan, Alan R., Due, Jacob Steen (13 June 2000). "Experiences with Object Oriented Development in PL/SQL". — The danish National Center for IT Research., 15 April 2012.
  2. Cunningham, Lewis. "PL/SQL Features by Release". — Burleson Consulting, Retrieved 15 April 2012.
  3. "When Should you use Java Stored Procedures with an Oracle Database, what are the Drawbacks?". Stack Overflow. Дата обращения: 30 апреля 2018. Архивировано 10 мая 2017 года.
  4. "Oracle's Object-Oriented Features". etutorial.org (16 апреля 2012). Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
  5. "Use Object PL/SQL". java2s.com (19 апреля 2012). Дата обращения: 30 апреля 2018. Архивировано 27 декабря 2017 года.
  6. "DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows". IBM (20 апреля 2012). Дата обращения: 30 апреля 2018. Архивировано 11 января 2018 года.
  7. "Oracle Documentation". Oracle (19 апреля 2012). Дата обращения: 30 апреля 2018. Архивировано 14 мая 2018 года.
  8. "Object Oriented Oracle, example 1". René Nyffenegger's collection of things on the web (19 апреля 2012). Дата обращения: 30 апреля 2018. Архивировано 3 марта 2016 года.

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.