powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры
21 сообщений из 21, страница 1 из 1
Вызов хранимой процедуры
    #38423314
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, у меня есть процедура с in/out параметрами :
авторCREATE OR ALTER procedure CL_CATALOG_EL_SET (
PDIRVALVID bigint,
PDIRID bigint,
PDIRCODE varchar(1024),
PDIRTYPE integer,
PDIRVAL varchar(1024),
PDIRNOTE varchar(1024),
PUSER int,
PMOVE bigint,
PMANIP bigint)
returns (
MSG varchar(1024),
RES bigint)
as...

согласно описанию http://firebirdsql.su/doku.php?id=execute_procedure
я вызвал процедуру в IbExpert, она отработала нормально, на рис. видно что мои out параметры получили значения.

Подскажите как должен выглядеть вызов этой процедуры в программе?? ведь out-параметры явно не указаны!!!!
Мне необходимо вызвать процедуру в компоненте UniSql (UniDac), получить р-т и дальше с ним поработать.
В Oracle out-параметры явно объявляются.
автор{if Oracle}
begin
CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :MSG, :RES, :PUSER, :PMOVE, :PMANIP);
end;
{else}
{if InterBase}
EXECUTE PROCEDURE CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP)
{endif}
{endif}

Спасибо.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423343
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mediv,

Писать:

SELECT FIELD1,FIELD2 from PROCEDURE_NAME(:IN_PARAM1,:IN_PARAM2)

пробовал?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423371
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medivв компоненте UniSql (UniDac)
Тут и Дельфи-то никто не знает, а ты про какие-то экзотические компоненты спрашиваешь. Иди
на форум производителя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423372
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterMediv,

Писать:

SELECT FIELD1,FIELD2 from PROCEDURE_NAME(:IN_PARAM1,:IN_PARAM2)

пробовал?


автор select *
from CL_CATALOG_EL_SET(:PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP)
такой вызов возвращает значения, как эти значения в параметр передать?? добавлял в конец авторinto :MSG, :RES , стреляла ошибка, как это правильно сделать??
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423390
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.ibase.ru/devinfo/sp_call.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423449
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ХП возвращает единственную строку данных, то можно юзать execute procedure <SP_Name(...)>, после чего получать значения обычным образом:
Msg := Query.FieldByName('MSG').AsString;
Если возвращается несколько строк, то select * from <SP_Name(...)>
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423512
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423513
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterвсегда пишу SELECT вне зависимости от того, возвращается одно значение
или несколько.
Вот только выполнимая процедура, без suspend внутри, через select ничего вернуть не может.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38423973
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-BrutalЕсли ХП возвращает единственную строку данных, то можно юзать execute procedure <SP_Name(...)>, после чего получать значения обычным образом:
Msg := Query.FieldByName('MSG').AsString;
Если возвращается несколько строк, то select * from <SP_Name(...)>


авторCREATE OR ALTER procedure CL_CATALOG_EL_SET (
PDIRVALVID bigint,
PDIRID bigint,
PDIRCODE varchar(1024),
PDIRTYPE integer,
PDIRVAL varchar(1024),
PDIRNOTE varchar(1024),
PUSER int,
PMOVE bigint,
PMANIP bigint)
returns (
MSG varchar(1024),
RES bigint)
as...


вызов :

авторEXECUTE PROCEDURE CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP)


В объявлении процедуры указан с блок с out-параметрами :

авторreturns (
MSG varchar(1024),
RES bigint)
as...


а в вызове его нет, как компонент в программе получиться значения этих параметров???
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424063
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterFr0sT-Brutal,

Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько.
Конечно так тоже можно, но в случае select будет создан курсор, а при execute просто вернутся значения. Правда, некоторые компоненты, особенно замшелые, могут не поддерживать такой способ вызова.

автора в вызове его нет, как компонент в программе получиться значения этих параметров???
Как-как, сервер-то знает, какие выходные параметры у ХП. Вот он их и возвращает.
Кусок моей проги:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  // заполнить параметры
  ...
  // выполнить и получить результат
  qMain.ExecQuery;
  Result := qMain.FieldByName('Err_Code').IsNull;
  if not Result then
  begin
    ErrCode := qMain.FieldByName('Err_Code').AsInteger;
    ErrMsg := qMain.FieldByName('Err_Msg').AsString;
  end;
  // закрывать не нужно, т.к. запрос вида execute proc


При этом текст запроса имеет вид 'EXECUTE PROCEDURE PR_PROC(:par1, :par2, ...)'
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424077
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-BrutalDarkMasterFr0sT-Brutal,

Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько.
Конечно так тоже можно, но в случае select будет создан курсор, а при execute просто вернутся значения. Правда, некоторые компоненты, особенно замшелые, могут не поддерживать такой способ вызова.

автора в вызове его нет, как компонент в программе получиться значения этих параметров???
Как-как, сервер-то знает, какие выходные параметры у ХП. Вот он их и возвращает.
Кусок моей проги:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  // заполнить параметры
  ...
  // выполнить и получить результат
  qMain.ExecQuery;
  Result := qMain.FieldByName('Err_Code').IsNull;
  if not Result then
  begin
    ErrCode := qMain.FieldByName('Err_Code').AsInteger;
    ErrMsg := qMain.FieldByName('Err_Msg').AsString;
  end;
  // закрывать не нужно, т.к. запрос вида execute proc


При этом текст запроса имеет вид 'EXECUTE PROCEDURE PR_PROC(:par1, :par2, ...)'

Мне нужно использовать UniSql (UniDac), там нет FieldByName. отказываться от него не хочется, иначе я попаду на параллельную разработку и поддержку 2-ух клиентов, запостил тему на сайте деворта, посмотрим что ответят.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424159
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mediv, мда, какой-то странный компонент-пак. Ну, тогда не судьба. Юзай query и select * from <proc>
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424182
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-BrutalMediv, мда, какой-то странный компонент-пак. Ну, тогда не судьба. Юзай query и select * from <proc>

Компоненты доступа к БД отличные, давно пользую, конечно там многих фишек нет, т.к. у каждой СУБД свои нюансы, но в основном все отлично, цепляюсь к разным БД, не нужно сад-огород из разных компонентов разводить, у деворта кстати есть компоненты заточенные под определенную БД, но по моему под FB нет.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424194
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mediv,

есть IBDAC
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424317
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medivиначе я попаду на параллельную разработку и поддержку 2-ух клиентов

Это не так уж сложно если немного подумать головой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424356
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение предложенное девартом :
авторUniSQL.CreateProcCall('CL_CATALOG_EL_SET');
UniSQL.Execute;
ShowMessage(UniSQL.ParamByName('msg').AsString);

Работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424358
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovMedivиначе я попаду на параллельную разработку и поддержку 2-ух клиентов

Это не так уж сложно если немного подумать головой.


Ну так поделись опытом с сообществом, всем будет полезно.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424387
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MedivНу так поделись опытом с сообществом, всем будет полезно.
Влад опять начнёт называть меня фантазёром.

Всё просто: разбиваешь своё приложение на три логические части "интерфейс БД", "объекты
бизнес-логики" и "пользовательский интерфейс". Всё общение с БД заворачиваешь в
первую часть и делаешь из неё абстрактный класс. Потом для работы с любой СУБД останется
только реализовать наследника этого класса и готово: можно выбирать используемую СУБД в
рантайме, просто присваивая нужный объект глобальной переменной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424414
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MedivРешение предложенное девартом :
авторUniSQL.CreateProcCall('CL_CATALOG_EL_SET');
UniSQL.Execute;
ShowMessage(UniSQL.ParamByName('msg').AsString);

Работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Подозревал, что они в понятие "параметры" запихнули и поля, но по справке ничего подобного не скажешь... ну, значит, разобрались)
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424496
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Я по такому принципу лет 10 назад делал "мостик" между кодом на FIB+ и IBObjects - мне нужна была поддержка обеих библиотек...
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #38424561
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВлад опять начнёт называть меня фантазёром.Ты знал :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]