вызов процедур и функций

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Закрыто
s.bel
Сообщения: 24
Зарегистрирован: Пн 04 фев 2013 12:20

вызов процедур и функций

Сообщение s.bel » Ср 22 янв 2014 04:33

Доброе время суток
интересует вопрос как осуществить вызов процедур/функций в unidac для оракла?
в компоненте DOA например данные команды выглядят так:

Вызов процедуры:

Код: Выделить всё

Form1.OraclePackage1.CallProcedure('DATA_commit', []);
Вызов функции:

Код: Выделить всё

id_zakaz := 
Form1.OraclePackage1.CallStringFunction('create_zakaz',
[Form1.ADOQuery1.FieldValues['ID'], 
Form1.ADOQuery1.FieldByName('DateCreate').AsDateTime, 
pay_begin, 
pay_end, 
Form1.ADOQuery1.FieldByName('sum').AsString, 
num_mag]);

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: вызов процедур и функций

Сообщение Alexp » Ср 22 янв 2014 08:56

Добрый день,

Для работы с хранимыми процедурами и функциями в UniDAC существует компонент TUniStoredProc, ниже приведен пример вызова процедуры

Код: Выделить всё

  UniStoredProc1.StoredProcName := 'sp_tets';
  UniStoredProc1.ParamByName('p_in_1').AsInteger := 1;
  ...
  UniStoredProc1.ParamByName('p_in_N').AsDateTime := now;
  UniStoredProc1.Execute;
  ShowMessage(UniStoredProc1.ParamByName('p_out_1').asString);
также вы можете использовать метод ExecProc

Код: Выделить всё

UniConnection1.ExecProc('create_zakaz',[Form1.ADOQuery1.FieldValues['ID'], Form1.ADOQuery1.FieldByName('DateCreate').AsDateTime, pay_begin, pay_end, Form1.ADOQuery1.FieldByName('sum').AsString,num_mag])
Более подробную информацию Вы можете найти в справке по UniDAC

s.bel
Сообщения: 24
Зарегистрирован: Пн 04 фев 2013 12:20

Re: вызов процедур и функций

Сообщение s.bel » Ср 22 янв 2014 10:45

UniStoredProc1.ParamByName('p_in_1').AsInteger := 1;
а если процедуре не передается ни каких параметров, как тогда запустить?
Если сразу после присваивания названия процедуры написать
UniStoredProc1.Execute;
То выдает эксепшен

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: вызов процедур и функций

Сообщение Alexp » Ср 22 янв 2014 11:07

Пожалуйста приведите точное сообщение об ошибке, скрипт хранимой процедуры Версии UniDAC, IDE а также клиента и сервера Oracle

s.bel
Сообщения: 24
Зарегистрирован: Пн 04 фев 2013 12:20

Re: вызов процедур и функций

Сообщение s.bel » Чт 23 янв 2014 07:47

Понял кажется почему возникает ошибка (не может найти вызываемую процедуру)
в DOA в параметрах указывалось:

Код: Выделить всё

PackageName = 'DB.Q$CP_CORE_LIB'
А как в unidac указать в каком пакете искать процедуры (если это конечно можно в юнидаке)?

Сами процедуры дать не могу, т.к. они мне не доступны

версия unidac 5.0

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: вызов процедур и функций

Сообщение Alexp » Чт 23 янв 2014 09:38

Если Вы работаете с пакетными процедурами и функциями, то для доступа к ним Вам необходимо указать имя пакета перед именем процедуры/функции

Код: Выделить всё

UniStoredProc1.StoredProcName := 'pkg_test.sp_tets';

UniConnection1.ExecProc('pkg_test.sp_tets',[...]);

s.bel
Сообщения: 24
Зарегистрирован: Пн 04 фев 2013 12:20

Re: вызов процедур и функций

Сообщение s.bel » Чт 23 янв 2014 09:41

Огромное спасибо, все получилось

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: вызов процедур и функций

Сообщение Alexp » Чт 23 янв 2014 10:25

Пожалуйста. Я рад что смог помочь.

Закрыто