Однако ничего не мешает использовать для разработки хранимых процедур любой язык программирования, компилятор которого на выходе может генерировать байт-код виртуальной машины Java. Далее полученный class-файл или jar-файл, можно загрузить в Oracle Database Java VM и вызывать внутри базы данных !
Рассмотрим для примера компилятор языка программирования Pascal Oxygene for Java компании RemObjects. Этот компилятор транслирует исходный код на Object Pascal в байт-код виртуальной машины Java.
Кстати говоря, эта компания имеет в своем арсенале также аналогичный компилятор Oxygene for .Net, который транслирует исходник на Pascal в код исполняющей системы .Net. Этот компилятор лицензирован компанией Embarcadero и входит в состав среды разработки Delphi под названием Delphi Prism.
Итак, предположим, что у нас имеется вот такой простейший класс на Object Pascal:
namespace testPascalSP;
interface
type
TMyClass = class
public
class function getHello : String;
end;
implementation
uses
java.sql.*;
class function TMyClass.getHello : String;
begin
var conn := DriverManager.getConnection('jdbc:default:connection:');
var stmt := conn.createStatement();
var rset := stmt.executeQuery('select ''Hello World!'' from dual');
if rset.next() then
Result := rset.getString (1);
rset.close();
stmt.close();
end;
end.
Класс TMyClass имеет одну статическую функцию getHello, которая возвращает традиционное приветствие, "извлекая" его из таблицы DUAL.Обратите внимание, что в программе на Pascal-е используются Jаva-библиотеки (JDBC-драйвер)!
Компилятор Oxygene for Java существует в двух видах: в виде графической среды разработки которая встраивается в среду MS Visual Studio и в виде утилиты командной строки.
Компилируем исходник на Pascal-е c помощью компилятора командной строки:
C:\>Oxygene.exe testPascalSP.oxygene
RemObjects Oxygene for .NET - Version 5.2.36.1029 (BETA)
Copyright RemObjects Software 2003-2012. All rights reserved.
Source file: C:\PascalSP>Program.pas
Reference: C:\Program Files (x86)\Java\jre6\lib\rt.jar
Compilation successful, generated file ".\bin\Release\testPascalSP.jar"
Пусть вас не смущает вывод названия RemObjects Oxygene for .NET. На самом деле для .Net и Java компилятор общий, и включает в себя back-end и для .Net, и Java.
С помощью опций проекта в файле test1.oxygene целевая платформа может переключаться.
Далее полученный jar-файл загружаем в СУБД:
C:\>loadjava -user scott/tiger@orcl -resolve testpascalsp.jar
Осталось создать PL/SQL-оболочку для вызова статического метода Java-класса:
C:\>sqlplus scott/tiger@orcl
SQL*Plus: Release 11.2.0.3.0 Production on Mon Jun 18 20:05:54 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create or replace function getHello return varchar2 is
2 language java
3 name 'testpascalsp.TMyClass.getHello() return java.lang.String';
4 /
Function created.
SQL>
Теперь можно вызывать нашу хранимую процедуру на Pascal внутри СУБД!
SQL> exec dbms_output.put_line(getHello());
Hello World!
PL/SQL procedure successfully completed.
Какие преимущества дает использование другого языка программирования, в данном случае Object Pascal, для разработки хранимых процедур СУБД:- В организации существуют большие объемы бизнес-логики реализованные на Delphi, которые можно относительно легко перенести с стороны клиента на сторону СУБД;
- В организации много разработчиков, которые хорошо знают Delphi, но до этого не работали с PL/SQL;
- Хотите использовать для разработки мощный и современный язык программирования поддерживающий аспектно-ориентированное программирование и контрактное программирование;
- Если Вы просто любите язык программирования Object Pascal!
Комментариев нет:
Отправить комментарий