Object-PL/SQL (объектно-процедурный язык / структурированный язык запросов или просто O-PL/SQL) является методологией использования процедурного языка расширения Oracle для SQL и реляционной базы данных Oracle. Дополнительные возможности из версии 7 и другие улучшения приводят к одной из широкомасштабных реализаций среды объектно-ориентированной парадигмы базы данных.
Несмотря на то, что общий синтаксис PL/SQL, ранее использовался для того, чтобы иметь сходство с Ada или Pascal, в нём было много улучшений, которые в основном включают код внедрения Java и объектно-ориентированный синтаксис внутри SQL.
Смешивание и внедрение триггеров и хранимых процедур было одним из прорывных пунктов, чтобы поддержать использование PL/SQL в ОО парадигме. Включение в синтаксис SQL таких операторов, как [класс].[объект] и реализация типа объекта (как и любой ОО язык), завершило минимальные требования к отображению подхода на расширенном языке SQL без использования специфического отображаемого программного обеспечения.
Автономия, известность и важность O-PL/SQL O-PL/SQL — это не просто использование версии языка программирования, а определение того, как его использовать, и это определяет автономию предмета. Каждая версия 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).
O-PL/SQL позволяет определять классы и создавать их как объекты, создавая определяемые пользователем типы данных как конструкторы записи, помимо использования Java в хранимых процедурах и триггерах.
Примеры использования синтаксиса O-PL/SQL Вот небольшой набор примеров синтаксиса O-PL/SQL, извлеченный из официальной документации и других источников:
Простой пример объектно-ориентированного PL/SQLcreate 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 72select avg(t.b.func()) from table_base t;Результат:36
См. также Реляционная СУБД База данных Transact-SQL
Библиография 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 . 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.
Примечания
Внешние источники Пример хранимой процедуры в Java, встроенной в Oracle Documentation: «Вызов методов Java в базе данных Oracle». Oracle.20 апреля 2012.
Категория:Программное обеспечение Oracle Категория:SQL Категория:Объектно-ориентированное программирование