Тема хранимых процедур на C# меня заинтересовала, хоть и не совсем понятно зачем это (хранимые процедуры на C#) нужно, но забавно. Впрочем надобность хранимых процедур Oracle на Java также остается для меня туманной.
Сначала пришлось повозиться с Oracle Database Extensions for .NET: оказалось, что к листенеру не был подключен ICP протокол, не был запущен агент для CLR и не был прогнан скрипт DBMSClr.plb после установки ODE.NET. Потом возник вопрос с коннектом из процедуры: ведь глупо в хранимой процедуре, которая запускается врапленной PL/SQL процедурой из схемы, писать в строке подключения имя пользователя, пароль и базу. Ответ нашелся в виде строки подключения "context connection=true". После этого все заработало.
Исходники простенькой функции:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
namespace OraTest
{
public class Class1
{
public static Int32 AbonentsCount()
{
//Создаем соединение
OracleConnection con = new OracleConnection();
con.ConnectionString = "context connection=true";
con.Open();
//Создаем команду
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "select count(*) cnt from prom_abonent";
cmd.Connection = con;
Int32 res = 0;
res = Convert.ToInt32(cmd.ExecuteScalar());
cmd.Dispose();
con.Close();
return res;
}
}
}
Запуск:
select abonentscount from dual;
Написал и уже потом нашел туториал от Оракла на эту тему:
http://www.oracle.com/pls/xe102/to_toc?pathname=appdev.102%2Fb25312%2Ftoc.htm&remark=portal+%28Getting+Started%29