powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
12 сообщений из 12, страница 1 из 1
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604834
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Есть у мну ХП ("sp_customer_reserve"), которая делает что-то там важное (создает резерв под клиента и, ес-сно, меняет регистровые остатки). Она возвращает записи из документа + новые значения остатков. Можно, конечно, и ничего не возвращать, но тогда геморно анализировать итог: дополнительно приходится делать 5-6 селектов.
Эта ХП будет вызываться:
1) самостоятельно;
2) из другой ХП ("sp_add_invoice_to_stock"), в for_select-цикле по документам - клиентским заказам.

Ну так вот, во втором случае мне совершенно не нужны данные, которые возвращает эта sp_customer_reserve.
То есть, напрашивается
Код: sql
1.
execute procedure sp_customer_reserve( :v_client_order )

- но так сделать нельзя: будет облом
Код: plaintext
1.
2.
3.
4.
5.
Statement failed, SQLSTATE = 07002
unsuccessful metadata update
-CREATE OR ALTER PROCEDURE SP_ADD_INVOICE_TO_STOCK failed
-Dynamic SQL Error
-Output parameter mismatch for procedure SP_CUSTOMER_RESERVE
After line 1 in file sp.sql


Пока что извращаюсь так:
Код: sql
1.
select count(*) from sp_customer_reserve( :v_client_order ) into v_dummy;

- где v_dummy - болванка просто для поддержания синтаксиса.

Какое-то поизящнее есть решение ?
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604864
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

передать признак в процедуру, и по нему либо suspend либо нет
(насколько изящно не знаю)
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604873
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mпередать признак в процедуру, и по нему либо suspend либо нет
(насколько изящно не знаю)Не взлетит. Компилятор как только видит список возвращаемых параметров, так и обламывает:
Код: plaintext
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.
set term ^;
create or alter procedure p1 as begin end^
create or alter procedure p2 as begin end^
set term ;^
commit;

set term ^;
create or alter procedure p1(a_do_suspend smallint) returns(x int, y int)
as
begin
  for select rand()*10, rand()*100 from rdb$types rows 5 into x,y
  do begin
    if (a_do_suspend=1) then  suspend;
  end
end
^

create or alter procedure p2 returns(u int, v int)
as
begin
  for select rand()*10, rand()*100 from rdb$types rows 5 into u,v
  do begin
    execute procedure p1(0);
    suspend;
  end
end
^

Код: plaintext
1.
2.
3.
This operation is not defined for system tables.
. . .
Output parameter mismatch for procedure P1.
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604876
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

А как бы ты сделал в обычном языке программирования?
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604877
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

модифицировать в селективных процедурах данные - дурной тон. Лучше наоборот сделать её всегда не селективной, а для анализа писать в GTT и потом запрос из GTT делать
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604886
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНе взлетит. Компилятор как только видит список возвращаемых параметров, так и обламывает
Ну таки да, так не взлетит.
Я чего-то решил что тебе только count(*) не нравится
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604888
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисмодифицировать в селективных процедурах данные - дурной тон. Лучше наоборот сделать её всегда не селективной, а для анализа писать в GTT и потом запрос из GTT делатья знаю, что так делать плохо. Но задолбало ваять сначала вызов ХП, а затем еще и в GTT лазить: ИБЭ не умеет за один тычок по F9 делать два и более вызовов в SQL Editor'e.
ЗЫ. isql хотя и умеет, но я тогда до пенсии тест этот ваять буду... :-)
ЗЗЫ. Решил пока просто, по-деревенски: процедуры, основное назначение которых есть изменение данных, будут иметь префикс "sp_", а всякие " отчетные " - "rp_".
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604891
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА как бы ты сделал в обычном языке программирования?я не программист (читай Рустама :)).
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604893
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидя знаю, что так делать плохо. Но задолбало ваять сначала вызов ХП, а затем еще и в GTT лазить: ИБЭ не умеет за один тычок по F9 делать два и более вызовов в SQL Editor'e.

может, если ты засунешь оба вызова в excecute block
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604896
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисможет, если ты засунешь оба вызова в excecute blockво-первых, это еще больше долбёжки; во-вторых, возвращаемые параметры сейчас интенсивно меняются: то чего-то не хватает, то наоборот, выкинуть надо. Значит, и EB надо будет менять каждый раз (returns-кляузу). Не айс...
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38604922
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПока что извращаюсь так:
Код: sql
1.
select count(*) from sp_customer_reserve( :v_client_order ) into v_dummy;

- где v_dummy - болванка просто для поддержания синтаксиса.

Какое-то поизящнее есть решение ?
Самое простое: создать процедуру с одним параметром v_client_order, без выходных параметров. В тело вписать код выше.
...
Рейтинг: 0 / 0
Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
    #38605014
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Какое-то поизящнее есть решение ?

Технически - никак, это запрещено синтаксисом и задокументировано.
Архитектурно - всегда вытаскивать поле статуса, а остальное опционально.

Насчёт технически - не знаю, соответствует ли текущее ограничение
стандарту, если нет - в трекер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как "поизящнее" вызвать селективную ХП, если возвращаемые ею кортежи НЕ нужны ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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