powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с хранимой процедурой
22 сообщений из 22, страница 1 из 1
Помогите с хранимой процедурой
    #33206113
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужна процедура которая возвращает данные, которые можно получить
только разными запросами. Как это сделать в одной процедуре?

Вот наваял, но такое не работает хотя и не ругается :(
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
CREATE PROCEDURE "DBA"."sp_WarehouseOrdersInfo"(in @idWarehouse gid,
in @rcv_city_id gid, 
out @ord_count integer,
out @ord_fsum price,
out @ord_tsum price,
out @ord_ssum price,
out @ord_rcv_fsum price,
out @ord_add_sum price,
out @ord_exped_sum price,
out @ord_nal_count integer,
out @ord_nal price,
out @ord_beznal_count integer,
out @ord_beznal price)
begin
  select Count(*),Sum(full_sum),Sum(trans_sum),Sum(strah_sum) 
    into @ord_count, @ord_fsum, @ord_tsum, @ord_ssum 
    from dba.orders 
    where (warehouse_id = @idWarehouse) and(city_id = @rcv_city_id);

  --Сумма получателями
  select Sum(full_sum),Sum(add_sum) 
    into @ord_rcv_fsum, @ord_add_sum 
    from dba.orders 
    where (whopay =  2 ) and(warehouse_id = @idWarehouse) and(city_id = @rcv_city_id);

  --Сумма доставок там, оплаченных отправителями
  select Sum(exped_sum) 
    into @ord_exped_sum
    from dba.orders 
    where (whopay =  1 ) and(warehouse_id = @idWarehouse) and(city_id = @rcv_city_id);

  --Сумма нал отправителем
  select Count(*),Sum(full_sum) 
    into @ord_nal_count, @ord_nal 
    from dba.orders 
    where (whopay =  1 ) and(paymethod =  1 ) and(warehouse_id = @idWarehouse) and(city_id = @rcv_city_id);

  --Сумма безнал отправитель
  select Count(*),Sum(full_sum) 
    into @ord_beznal_count, @ord_beznal 
    from dba.orders 
    where (whopay =  1 ) and(paymethod =  2 ) and(warehouse_id = @idWarehouse) and(city_id = @rcv_city_id); 
end;
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33206141
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyan wrote:

> нужна процедура которая возвращает данные которые можно получить только
> разными запросами. Как это сделать в одной процедуре? Вот наваял, но
> такое не работает хотя и не ругается :(

Ничего подозрительного не вижу. А что значит "не работает"?
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33206142
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyan wrote:

> нужна процедура которая возвращает данные которые можно получить только
> разными запросами. Как это сделать в одной процедуре?

Кстати, о каком сервере речь-то ;)?
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33206176
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyan
Лучше убрать out-параметры, обьявить в теле процедуры аналогичные переменные и в конце процедуры поставить:
Код: plaintext
SELECT @ord_count AS ord_count, @ord_fsum AS @ord_fsum, ... ;
Тогда процедура будет возвращать как при вызове CALL, так и при использовании в SELECT одну запись с обозначенными полями. В существующем же варианте чтобы получить результаты необходимо вызывать процедуру через CALL, подставляя в out-параметры предварительно обьявленные переменные, в которых и будет помещен результат после выполнения процедуры.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33206385
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЛучше убрать out-параметры, обьявить в теле процедуры аналогичные переменные и в конце процедуры поставить:
Код: plaintext
SELECT @ord_count AS ord_count, @ord_fsum AS @ord_fsum, ... ;

А почему "лучше"? Честно говоря не вижу больших плюсов между отдельным резалт-сетом и out-параметрами. Out-параметры по моему намного более удобны, их значение можно получить непосредственно после вызова процедуры, сразу по получению первого резалт-сета. А дальше уже можно будет даже управлять чтением резалт-сетов.

У Dimyan проблема скорее всего в том, что он не умеет читать множественные резалт-сеты? :) Это делается по разному на разных клиентских интерфейсах, скажи на чем ты пишешь клиента, подскажем как работать с множественнымим резалт-сетами.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33206542
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ASCRUSЛучше убрать out-параметры, обьявить в теле процедуры аналогичные переменные и в конце процедуры поставить:
Код: plaintext
SELECT @ord_count AS ord_count, @ord_fsum AS @ord_fsum, ... ;

А почему "лучше"? Честно говоря не вижу больших плюсов между отдельным резалт-сетом и out-параметрами. Out-параметры по моему намного более удобны, их значение можно получить непосредственно после вызова процедуры, сразу по получению первого резалт-сета. А дальше уже можно будет даже управлять чтением резалт-сетов.

У Dimyan проблема скорее всего в том, что он не умеет читать множественные резалт-сеты? :) Это делается по разному на разных клиентских интерфейсах, скажи на чем ты пишешь клиента, подскажем как работать с множественнымим резалт-сетами.
На Delphi лучше вообще с out-параметрами не связываться.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33207053
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем! Извените балбеса! Все действительно работает, это я в
клиенте накосячил. На C# клиента переписываю (до этого на Delphi писал),
всю логику на хранимки перевожу, вот и подпариваюсь понемногу :(
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33207692
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSНа Delphi лучше вообще с out-параметрами не связываться.
Какая разница на чем написан клиент? Out-параметры это давно известная и стандартизированая штука, поддержка которой есть практически в любом интерфейсе. У меня вон Дельфевый клиент через SaVCL прекрасно работает с out-параметрами. Ни разу не возникало проблем. Точно так же и C через ODBC прекрасно работает. Не могу сказать что я так уж широко использую out-параметры в хранимках, но лично у меня ни разу не было ни одного глюка из-за работы с ними.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208136
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В делфи или BCB нельзя работать с ХП, которая возвращает данные в OUT в OUT параметрах и еще возвращает resultset. Не знаю, в чем причина - но это факт (по крайней мере при работе через мост BDE-ODBC). Еще например, классы для работы с БД у Lotus Notes (Lorus Script) не работают с OUT параметрами вообще (вернее там нет специальной операции вызова ХП, вызов ХП оформляется как запрос exec ....), - только обрабатываются resultset. Как в других клиентских платформах точно не скажу, но вырисовывается закономерность, что с OUT параметрами "проблем" больше.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208585
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldВ делфи или BCB нельзя работать с ХП, которая возвращает данные в OUT в OUT параметрах и еще возвращает resultset. Не знаю, в чем причина - но это факт (по крайней мере при работе через мост BDE-ODBC). Еще например, классы для работы с БД у Lotus Notes (Lorus Script) не работают с OUT параметрами вообще (вернее там нет специальной операции вызова ХП, вызов ХП оформляется как запрос exec ....), - только обрабатываются resultset. Как в других клиентских платформах точно не скажу, но вырисовывается закономерность, что с OUT параметрами "проблем" больше.
Просто Delphi для получения out-параметров генерит примерно следующий скрипт:
Код: plaintext
1.
2.
DECLARE @Param1 int
EXEC MyProc @Param1 out
SELECT @Param1
То есть фактически "эмулирует" получение параметров. Соотвествующе если процедура тоже возвращает набор данных, то параметры уже не будут видны, так как не поддерживается возврат множества resultset.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208648
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Просто Delphi для получения out-параметров генерит примерно следующий скрипт:
Код: plaintext
1.
2.
DECLARE @Param1 int
EXEC MyProc @Param1 out
SELECT @Param1
То есть фактически "эмулирует" получение параметров. Соотвествующе если процедура тоже возвращает набор данных, то параметры уже не будут видны, так как не поддерживается возврат множества resultset.

Кто вам сказал ? И про выходные параметры, и про множественные наборы данных - все неправда. Я, конечно, Дельфу не люблю, но правда дороже ...
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208727
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv ASCRUS
Просто Delphi для получения out-параметров генерит примерно следующий скрипт:
Код: plaintext
1.
2.
DECLARE @Param1 int
EXEC MyProc @Param1 out
SELECT @Param1
То есть фактически "эмулирует" получение параметров. Соотвествующе если процедура тоже возвращает набор данных, то параметры уже не будут видны, так как не поддерживается возврат множества resultset.

Кто вам сказал ? И про выходные параметры, и про множественные наборы данных - все неправда. Я, конечно, Дельфу не люблю, но правда дороже ...
Я вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208945
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЯ вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)
А что, кто-то еще пытается работать с этим уродцем BDE? :)
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208977
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ASCRUSЯ вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)
А что, кто-то еще пытается работать с этим уродцем BDE? :)

дык ведь в любой книжке с этого все начинается
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33208986
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ASCRUSЯ вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)
А что, кто-то еще пытается работать с этим уродцем BDE? :)
А сколько старых проектов живо на BDE и еще сколько лет жить будет и сколько еще новых проектов будут писаться теми, кто привык на нем работать.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33209203
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, есть полноценные альтернативы BDE?
Меня в BDE устраивает почти все за исключением пары моментов, которые обходятся:
- вышеупомянутые особенности работы с OUT параметрами
- возникновение исключения при чтении набора данных, в которых есть null значения.
А бде особенно люб мне за то, что позволяет помимо работы с SQL серверами работать с локальными БД с помощью SQL. Такое только фокспро умеет.Особенно бывет полезно для клиента, который получает относительно небольшой резалтсет, который сбрасывается в локальную табличку и из интерфейса программы пользователем уже фильтруется, группируется и делаются другие манипуляции.
Очень часто в форумах слышу, что BDE отстой, а вот почему, еще никто не объяснил.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33209507
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldА что, есть полноценные альтернативы BDE?
Меня в BDE устраивает почти все за исключением пары моментов, которые обходятся:
- вышеупомянутые особенности работы с OUT параметрами
- возникновение исключения при чтении набора данных, в которых есть null значения.
А бде особенно люб мне за то, что позволяет помимо работы с SQL серверами работать с локальными БД с помощью SQL. Такое только фокспро умеет.Особенно бывет полезно для клиента, который получает относительно небольшой резалтсет, который сбрасывается в локальную табличку и из интерфейса программы пользователем уже фильтруется, группируется и делаются другие манипуляции.
Очень часто в форумах слышу, что BDE отстой, а вот почему, еще никто не объяснил.
Обьясняю:
1. Умерла, так умерла - не развивается аж с Delphi 3
2. Проблемы с многопоточностью при интенстивном выполнении множества запросов (элементарно вышибает сам BDE)
3. Проблема обрезания varchar до 255 - полный позор с учетом "обещаний" во всех версиях BDE что это будет исправлено - просто какой то кретин в коде VCL создает и режет буфер при копировании значений полей и параметров с явно указанным там 255.
4. Проблема BLOB-полей - забавно конечно "предугадывать" в алиасе, сколько максимальное кол-во записей и максимальный размер блобов у нас может быть в запросах. Я конечно понимаю, что динамически выделять память под такие поля при неизвестном заранее кол-ве записей - это нужно писать отдельный механизм кеширования, но и зачем тогда в документации рассказывать, что потом все будет доработано и исправлено.

Далее по сабжу - с помощью SQL работать с локальными БД может не только BDE и FoxPro, любой ODBC нормальный драйвер, так что через тоже ADO можно прицепить DBF и гонять по ним небольшие запросы, фильтровать и т.д., и чем тут BDE лучше честно говоря не понимаю.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33211838
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Кто вам сказал ? И про выходные параметры, и про множественные наборы данных - все неправда. Я, конечно, Дельфу не люблю, но правда дороже ...
Я вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)[/quot]

Ну и что? В BDE можно и получать выходные параметры (по RPC), и получать множественные наборы данных.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33211840
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old
- вышеупомянутые особенности работы с OUT параметрами
- возникновение исключения при чтении набора данных, в которых есть null значения.


Что-то я не понимаю, работал я на дельфе и с out-ами все было в порядке, и с ASE и с MSSQLServer.

Ggg_old
Очень часто в форумах слышу, что BDE отстой, а вот почему, еще никто не объяснил.


Я могу объяснить - отстой не BDE, а борланд вообще. Ну на фига писали второй ODBC ? Правда, в их защиту надо честно сказать, что писали они его еще до возникновения ODBC, но это всё равно их не оправдывает - ну, подождали бы маленько ....
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33211841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
...
Я вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)

Ну и что? В BDE можно и получать выходные параметры (по RPC), и получать множественные наборы данных.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33211843
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
4. Проблема BLOB-полей - забавно конечно "предугадывать" в алиасе, сколько максимальное кол-во записей и максимальный размер блобов у нас может быть в запросах. Я конечно понимаю, что динамически выделять память под такие поля при неизвестном заранее кол-ве записей - это нужно писать отдельный механизм кеширования, но и зачем тогда в документации рассказывать, что потом все будет доработано и исправлено.


А с блобами в принципе нельзя по-VCL-евски работать, нельзя их в буфер строки мапировать, не обрезая. Блобы надо получать обязательно порциями через что-то типа call-back-ов, во всех приличных API так делается.
А борланду - верьте больше, вон, некоторые и в "письмо счастья" верят.
...
Рейтинг: 0 / 0
Помогите с хранимой процедурой
    #33211894
sn1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ggg_oldВ делфи или BCB нельзя работать с ХП, которая возвращает данные в OUT в OUT параметрах и еще возвращает resultset.
...

В BDE возвращать OUT-параметры вместе с резалтсетом можно, нужно только вызвать StoredProc.GetResults после Open. Так сделано только для Sybase/MSSQL, и в справке описано - так что ошибкой не является.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с хранимой процедурой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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