Разработка .NET-хранимых процедур для Oracle10g Database for Windows.Источник: Oracle Magazine - Русское издание
Признавая популярность платформы Microsoft .NET среди разработчиков приложений на платформе Windows , Oracle Corporation , начиная с версии 10g Rel.2 интегрировала .NET CLR в свою СУБД. Теперь разработчики приложений для Oracle Database for Windows могут создавать хранимые процедуры в виде сборок .NET . Интеграция с CLR предлагает множество выгод разработчикам приложений для Oracle Database :
В настоящей статье будет рассмотрены следующие практические вопросы:
Рассмотрим технологию создания и выполнения .NET -хранимых процедур. Ключевым инструментом для создания .NET -хранимых процедур является Oracle Developer Tools for .NET [ODT .NET] - представляет собой набор свободно доступных инcтрументов разработчика для платформы .NET . В состав ODT .NET входят подключаемые модули ( plug-ins ) к средам разработки Microsoft Visual Studio .NET 2003/2005 . ODT .NET позволяет, наряду с разработкой .NET -хранимых процедур, также создавать клиентские приложения работающие с СУБД Oracle Database. Для взаимодействия с базами данных Oracle используются механизмы ADO .NET . Для трансляции высокоуровневых вызов ADO .NET в "родные" ( native ) низкоуровневые вызовы Oracle Call Interface , корпорация Oracle поставляет свой собственный провайдер ADO DB .NET . В составе клиентского программного обеспечения Oracle Database 10g Rel.2 Client поставляется два провайдера доступа - для версий ADO .NET 1.1 и ADO .NET 2.0 . Для выполнения хранимых процедур, реализованных в сборках .NET , на сервере базы данных, предназначен компонент Oracle Database Extensions for .NET [ODE .NET] . Указанный компонент входит в дистрибутив Oracle Database 10.2.0 for Windows . Рис.1 Поддержка технологий .NET в Oracle Database for Windows Установка Oracle Database Прежде всего, необходимо отметить тот очевидный факт, что возможность создания .NET -хранимых процедур возможна только для Oracle Database на платформе MS Windows . Поддержка выполнения .NET -хранимых процедур доступна во всех редакциях СУБД Oracle : начиная от бесплатной версии ( Express Edition ) и заканчивая корпоративной редакцией ( Enterprise Edition ). Для включения возможности выполнения .NET -хранимых процедур, при установке программного обеспечения Oracle Database 10g Rel.2 for Windows , в списке компонентов необходимо выбрать Oracle Database Extensions for .NET .
Рис.2 Выбор установки ODE.NET в среде Oracle Universal Installer Установка ODE .NET 10.2.0.2 Следующим шагом, для включения поддержки .NET Framework версии 2.0 в .NET-хранимых процедурах, нужно установить обновление (patch) ODE .NET 10.2.0.2. ODE .NET 10.2.0.2 входит в состав Oracle Developer Tools for .NET. Загрузить ODT .NET можно с сайта Oracle Technology Network по следующему адресу: /technology/software/tech/dotnet/utilsoft.html При установке обновления ODT .NET 10.2.0.2 , в списке компонентов необходимо выбрать Oracle Database Extensions for .NET
Рис.3 Выбор Oracle Database Extensions for .NET при установке ODT .NET Нужно обратить внимание, что ODE .NET необходимо устанавливать в тот же каталог, в который установлен Oracle Database .
Рис.4 Выбор при установке ODE 10.2.0.2, каталога с установленной Oracle Database Далее, следует выбрать: с помощью какой версии .NET Framework будут созданы и будут далее выполняться .NET-хранимые процедуры.
Рис.5 Выбор версии .NET Framework для выполнения .NET-хранимых процедур После установки обновления ODE .NET 10.2.0.2 , в среде SQL*Plus следует скомпилировать новую версию пакета DBMS_CLR , с помощью следующего набора команд: SQL> connect / as sysdba Установка Oracle Developer Tools Установка Oracle Developer Tools for Visual Studio .NET Установка Oracle Developer Tools Для поддержки процесса разработки .NET -хранимых процедур, необходимо установить подключаемый модуль, входящий в состав ODT .NET , к среде MS Visual Studio . Oracle Developer Tools for Visual Studio .Net , также как и ODE .NET , входит в состав Oracle Developer Tools for .NET 10.2.0.2 .
Рис.6 Установка Oracle Developer Tools for Visual Studio .NET На следующем шаге необходимо выбрать набор компонентов для соответствующей версии MS Visual Studio .NET :
Рис.7 Выбор компонентов для MS Visual Studio .NET 2005 Процесс настройки ПО Oracle Database для выполнения .NET -хранимых процедур состоит из двух шагов:
Настройка реестра MS Windows Для определения версии .NET Framework, которая будет использоваться при создании и выполнении .NET-хранимых процедур, необходимо вручную создать строковый ключ реестра с именем ".NETFramework" в разделе: "HKEY_LOCAL_MACHINESOFTWAREORACLEKEY_(HOMENAME)ODE" Значения ключа " .NET Framework " могут быть следующими:
Рис.8 Определение версии .NET Framework 2.0 для выполнения .NET-хранимых процедур На Рис.8 приведен пример определения Net Framework версии 2.0 в качестве среды выполнения .NET -хранимых процедур. Настройка сетевого прослушивающего процесса Oracle Listener В случае создания сетевого прослушивающего процесса с помощью Net Configuration Assistant , файлы listener.ora и tnsnames.ora создаются автоматически, но также их можно создать и вручную. Содержимое файла listener.ora (ПО Oracle Database в данном случае установлено в каталог c:oracleproduct10.2.0db ) должно иметь следующий вид: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = c:oracleproduct10.2.0db) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = c:oracleproduct10.2.0db) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mypc)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) Содержимое файла tnsnames.ora должно включать в себя два алиаса: ORACLR_CONNECTION_DATA и EXTPROC_CONNECTION_DATA : ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) В заключение, необходимо убедиться, что запущены два сервиса, которые необходимы для выполнения .NET-хранимых процедур:
Рис.9 Для выполнения .NET-хранимых процедур на сервере должны быть запущены сервисы TNSLlistener и CLRAgent
Создание .NET-хранимых процедур в среде MS Visual Studio 2005 и .NET Framework 2.0 В данном разделе будет рассмотрен процесс создания и выполнения .NET -хранимых процедур с помощью среды разработки MS Visual Studio 2005 и среды выполнения .NET Framework 2.0 .
Рис.10 Выбор шаблона проекта "Oracle Project" в среде MS Visual Studio 2005 После выбора шаблона проекта " Oracle Project ", автоматически генерируется следующий шаблон кода (используется язык программирования C# ): using System; using System.Collections.Generic; using System.Text; using System.Data; using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; namespace OraNetSPSample1 { public class public static void StoredProcedure1() { // enter you code here } } } В качестве примера, будет создана хранимая функция getDatabaseVersionStr , возвращающая строку с версией базы данных Oracle Database : using System; using System.Collections.Generic; using System.Text; using System.Data; using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; namespace OraNetSPSample1 { public class Class1 { public static String v_xResult; // Получаем объект соединения с базой данных:OracleConnection(); OracleConnection v_xConneсtion = newOracleConnection(); //открываем соединение: v_xConnection.Open(); //создаем команду-запрос к базе даных: OracleCommand v_xCommand = v_xConnection.CreateCommand(); v_xCommand.CommandText = "select * from v$version"; //выполняем запрос: OracleDataReader v_xReader = v_xCommand.ExecuteReader(); //считываем результат v_xReader.Read(); v_xResult = v_xReader.GetString(0); //освобождаем объекты v_xReader.Close(); v_xCommand.Dispose(); //Возвращаем результат: return v_xResult; } } } В одной сборке может содержаться несколько .NET -хранимых процедур. Все они должны быть реализованы как статические методы класса. Публикация .NET-хранимых процедур в среду выполнения на сервере Oracle Database Процесс публикации .NET-хранимой процедуры на сервере Oracle Database состоит из двух шагов:
В отличие от Java -хранимых процедур, PL/SQL -оболочка создается не явным образом, а в виде зашифрованной PL/SQL -процедуры с вызовами внутреннего системного пакета DBMS_CLR . Генерацию этой процедуры-оболочки производит мастер установки ( deploy wizard ) ODT .NET . В ходе процесса публикации, также создается внешняя библиотека ( library ) базы данных Oracle . Указанная библиотека ссылается на dll -файл сборки .NET . В случае, если в результате процесса разработки изменится тип или число формальных параметров NET -процедуры, то необходимо заново перегенерировать PL/SQL -оболочку. В случае же изменения только тела .NET -процедуры, достаточно просто скопировать файлы сборки на хост-машину c Oracle Database . Для запуска мастера публикации сборки необходимо в среде MS Visual Studio выбрать пункт меню " Build/Deploy <имя проекта>".
Рис.11 Запуск мастера публикации сборки на сервере Oracle Database В появившемся диалоговом окне необходимо создать соединение к нужной базе данных:
Рис.12 Создание соединения к базе даных В следующем диалоговом окне необходимо выбрать режим публикации сборки с хранимой процедурой на стороне сервера Oracle Database . Всего возможны три режима публикации:
При первой установке .NET -хранимой процедуры следует выбрать пункт " Copy assembly and generate stored procedure ".
В следующем диалоговом окне необходимо указать имя библиотеки (external library) Oracle Database; по умолчанию устанавливается имя dll-файла сборки.
В следующем шаге мастера публикации происходит выбор для копирования файлов, от которых зависит сборка.
Для определения схемы БД, в которой будет опубликована .NET -хранимая процедура, предназначен следующий шаг мастера.
Важным аспектом публикации .NET -хранимой процедуры является установка соответствия между типами ее параметров и типами PL/SQL . Установка соответствия производится с помощью выбора кнопки " Parameter Type Mapping: ".
Более полная информация по соответствию типов содержится в документе OracleR Data Provider for .NET Developer's Guide 10g Release 2 (10.2.0.2)B28089-01 На заключительном шаге можно просмотреть и сохранить SQL -скрипт создания PL/SQL -оболочки для .NET -хранимой процедуры.
После публикации .NET -хранимой процедуры на сервере базы данных Oracle Database , ее вызов аналогичен вызову любой другой PL/SQL-процедуры. SQL> conn spnet_demo/spnet_demo Соединено. SQL> set serveroutput on SQL> exec dbms_output.put_line(GetDatabaseVersionStr); Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod Процедура PL/SQL успешно завершена. Отличительной особенностью .NET -хранимых процедур является возможность их отладки на стороне клиента. Для этого достаточно заменить строку соединения в свойстве ConnectionString класса OracleConnection на соединение к удаленной базе данных. Для этого можно использовать либо макроподстановку, либо глобальную строковую переменную: v_xConnection.ConnectionString = v_xConnectionStr; В преведенным выше примере кода, простой заменой значения переменной v_xConnectionStr на значение "context connection=true" , можно обеспечить возможность выполнения статических методов на сервере БД Oracle . Обеспечив возможность создания и выполнения .NET-хранимых процедур, корпорация Oracle предоставила в распоражение разработчиков мощные возможности по созданию приложений .NET которые работают с Oracle Database на платформе MS Windows. Игорь Мельников, |