powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры в селекте
25 сообщений из 25, страница 1 из 1
Вызов хранимой процедуры в селекте
    #38790164
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Такая ситуация, к примеру запрос по заказам, в каждом заказе по несколько товаров, надо вывести номера заказов и наименования товаров в заказе через строку.
В oracle это решается просто
Код: plsql
1.
2.
3.
SELECT T.ZAKAZ Z_NUM,
           GET_ZAKAZ_TOVAR_STR(T.ZAKAZ) DETAILS_STR
      FROM ZAKAZ T


где GET_ZAKAZ_TOVAR_STR - хранимая функция, которая просто в цикле склеивает наименования товаров по ID заказа.

Я так понял в Firebird нет хранимых функций? Как быть? Создавать UDF или можно хранимую процедуру с выходным параметром? В таком случае как тогда делать вызов в селекте?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790166
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikЯ так понял в Firebird нет хранимых функций?
Куда они делись?

http://www.firebirdsql.org/refdocs/langrefupd21-ddl-procedure.html
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790167
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790265
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
по ссылке же процедуры хранимые
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790274
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikпо ссылке же процедуры хранимые
Они-же функции. Все таки потрудись почитать русскую доку, люди старались...
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790283
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

что мне должно дать чтение http://www.sql.ru/forum/1123374/ann-rukovodstvo-po-yazyku-sql-subd-firebird ? прояснить как создавать UDF?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790287
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikчто мне должно дать чтение http://www.sql.ru/forum/1123374/ann-rukovodstvo-po-yazyku-sql-subd-firebird] http://www.sql.ru/forum/1123374/ann-rukovodstvo-po-yazyku-sql-subd-firebird? прояснить как создавать UDF?
https://www.assembla.com/spaces/firebird-russian-documentation/documents/cg4MPuxBCr5j1WacwqEsg8/download/cg4MPuxBCr5j1WacwqEsg8]Так доступнее?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790289
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanaidynchikпо ссылке же процедуры хранимые
Они-же функции. Все таки потрудись почитать русскую доку, люди старались...
Функции только в FB3. Это в доке написано?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790293
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanaidynchikчто мне должно дать чтение http://www.sql.ru/forum/1123374/ann-rukovodstvo-po-yazyku-sql-subd-firebird] http://www.sql.ru/forum/1123374/ann-rukovodstvo-po-yazyku-sql-subd-firebird? прояснить как создавать UDF?
https://www.assembla.com/spaces/firebird-russian-documentation/documents/cg4MPuxBCr5j1WacwqEsg8/download/cg4MPuxBCr5j1WacwqEsg8]Так доступнее?
Ёма... Форум не понимает https? https://www.assembla.com/spaces/firebird-russian-documentation/documents/cg4MPuxBCr5j1WacwqEsg8/download/cg4MPuxBCr5j1WacwqEsg8 кликай сюда.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790294
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
не мути воду. Хранимые функции появились только в ФБ3.

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

сижу читаю, но что там про вызов процедур из селекта... я нашел только "Хранимая процедура (ХП) – это программный модуль, который может быть вызван с клиента, из другой процедуры, выполнимого блока (executable block) или триггера."
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790297
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeewadmanпропущено...

Они-же функции. Все таки потрудись почитать русскую доку, люди старались...
Функции только в FB3. Это в доке написано?
Ась? Здрасьте, тролль.

Код: sql
1.
2.
3.
SELECT T.ZAKAZ Z_NUM,
           (select some_val from GET_ZAKAZ_TOVAR_STR(T.ZAKAZ)) DETAILS_STR
FROM ZAKAZ T
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790300
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrХранимые функции появились только в ФБ3.
Особой разницы между процедурами и функциями не вижу.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790301
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrчто мешает использовать в селектах хранимые процедуры, через подзапросы?

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

создание UDF к SQL не относится. Только объявление.

Как использовать хранимые процедуры вместо хранимых функций там нет примера. Ничего добавлю.

Хочешь хранимые функции бери Firebird 3, но он пока Beta
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790311
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

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

спасибо за пример! можно было и сразу так ответить, а не тыкать ссылками :)
wadman вас просто дружелюбно тролльнул :) В следующий раз вы кого-нить тут так же тролльнёте, тот следующего, и жизнь трольнячья закипит :)
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790438
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT T.ZAKAZ Z_NUM,
           ZZ.some_val DETAILS_STR
FROM ZAKAZ T left join GET_ZAKAZ_TOVAR_STR(T.ZAKAZ) ZZ on 1=1



NickDeeтролльнул :)Ща кое-кто па-дружески отправится в ридонли.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790451
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanОсобой разницы между процедурами и функциями не вижу.
А она есть. Теоретически функции должны быть быстрее, а по факту странное поведение.
speed test
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
execute block
as
declare variable n integer;
begin
  select sum(1) from generate_serial(1, 1000000) into :n;
end
--Execute time = 967ms

execute block
as
declare procedure prc returns(n integer) as
                        begin
                          n = 1;
                          suspend;
                        end
declare variable n integer;
begin
  select sum((select n from prc)) from generate_serial(1, 1000000) into :n;
end
--Execute time = 952ms

execute block
as
declare function func returns integer as
                        begin
                          return 1;
                        end
declare variable n integer;
begin
  select sum(func()) from generate_serial(1, 1000000) into :n;
end
-- Execute time = 2s 340ms

-------------------------------------------
create or alter procedure GENERATE_SERIAL (
    from_value integer,
    to_value integer,
    step integer = 1)
returns (
    id integer)
as
begin
  id = from_value;
  while (id <= to_value) do
  begin
    suspend;
    id = id + step;
  end
end

...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790452
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikгде GET_ZAKAZ_TOVAR_STR - хранимая функция, которая просто в цикле
склеивает наименования товаров по ID заказа.
А в Firebird для этого есть стандартная функция LIST() и не надо изобретать велосипед.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790468
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

если объявишь функцию как deterministic будет быстрее.

Могу лишь предположить что некоррелированный подзапрос материализуется.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38790491
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисесли объявишь функцию как deterministic будет быстрее.
В данном примере да, можно.
Симонов ДенисМогу лишь предположить что некоррелированный подзапрос материализуется.
Похоже на то.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
execute block
as
declare procedure prc(par1 int) returns(n integer) as
                        begin
                          n = 1;
                          suspend;
                        end
declare variable n integer;
begin
  select sum((select n from prc(g.id))) from generate_serial(1, 1000000) g into :n;
end
-- Execute time = 3s 728ms

execute block
as
declare function func(par1 int) returns integer as
                        begin
                          return 1;
                        end
declare variable n integer;
begin
  select sum(func(g.id)) from generate_serial(1, 1000000) g into :n;
end
-- Execute time = 2s 652ms

...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38792898
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovaidynchikгде GET_ZAKAZ_TOVAR_STR - хранимая функция, которая просто в цикле
склеивает наименования товаров по ID заказа.
А в Firebird для этого есть стандартная функция LIST() и не надо изобретать велосипед.

оооооо, спасибо!
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38792924
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikоооооо, спасибо!
Только порядок строк в результате произвольный
...
Рейтинг: 0 / 0
Вызов хранимой процедуры в селекте
    #38793060
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийТолько порядок строк в результате произвольныйобычный воркэраунд обернуть снаружи еще одним селектом, а во внутреннем требуемый ордер бай.
aidynchikооооооА если еще и доку почитать, то там открытий чудных нас ждет, огого!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры в селекте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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