Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с хранимой процедурой / 22 сообщений из 22, страница 1 из 1
08.08.2005, 16:13
    #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
08.08.2005, 16:44
    #33206141
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с хранимой процедурой
Dimyan wrote:

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

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

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

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

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

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

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

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

дык ведь в любой книжке с этого все начинается
...
Рейтинг: 0 / 0
10.08.2005, 18:15
    #33208986
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с хранимой процедурой
White Owl ASCRUSЯ вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)
А что, кто-то еще пытается работать с этим уродцем BDE? :)
А сколько старых проектов живо на BDE и еще сколько лет жить будет и сколько еще новых проектов будут писаться теми, кто привык на нем работать.
...
Рейтинг: 0 / 0
10.08.2005, 20:57
    #33209203
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с хранимой процедурой
А что, есть полноценные альтернативы BDE?
Меня в BDE устраивает почти все за исключением пары моментов, которые обходятся:
- вышеупомянутые особенности работы с OUT параметрами
- возникновение исключения при чтении набора данных, в которых есть null значения.
А бде особенно люб мне за то, что позволяет помимо работы с SQL серверами работать с локальными БД с помощью SQL. Такое только фокспро умеет.Особенно бывет полезно для клиента, который получает относительно небольшой резалтсет, который сбрасывается в локальную табличку и из интерфейса программы пользователем уже фильтруется, группируется и делаются другие манипуляции.
Очень часто в форумах слышу, что BDE отстой, а вот почему, еще никто не объяснил.
...
Рейтинг: 0 / 0
11.08.2005, 08:24
    #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
12.08.2005, 02:04
    #33211838
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с хранимой процедурой
ASCRUS
Кто вам сказал ? И про выходные параметры, и про множественные наборы данных - все неправда. Я, конечно, Дельфу не люблю, но правда дороже ...
Я вообще то про BDE разговор вел. Так что все это чистая правда, элементарно трейсом проверяется :)[/quot]

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


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

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


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

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


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

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


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