powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Stored procedure & Multi Result Set
25 сообщений из 33, страница 1 из 2
Stored procedure & Multi Result Set
    #33436879
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порылся в форуме ответа не нашел, поэтому задам.
Есть некая хранимая процедура, но не простая, а хитрая. Хитрость ее
заключается в том, что в ее коде после возвращения набора происходят еще
определенные действия.
Типа такого:
begin
...
select a,b,c,
from table;
update table2
set d=f;
end;
Т.е. эта процедура что-то среднее между обычной процедурой и процедурой,
которая возвращает несколько наборов.
Так вот, делая в PB6.5 datawindow на основе этой процедуры мы можем получить
то, что она возвращает, но код написаный в ней после возвращения набора не
выполняется. Это возможно побороть не меняя версии ПБ и процедуры?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33437003
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База то какая?
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33438010
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB + Sybase ASE и MS SQL прекрасно работают с процедурами вида

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE..
AS
BEGIN
...
  SELECT a, b, c
...
  SELECT d,e,f
...
  SELECT g,h

END

С обработкой нескольких ResultSet, проверялось на 6.5 и 9.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33439478
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. База ASA9.
2. У меня набор, возвращаемой процедурой, один, но после его возвращения в
процедуре есть выполняемый код. Это не тоже самое, что два селекта.
3. Меня интересует именно вызов из datawindow. Разве можно в одно ДВ
возвращать несколько наборов?! Я так понимаю, что в ДВ можно вернуть только
один, не обязательно первый.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33439632
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это принципиально, выполнять код после возврата результата клиенту? Если да, то имеет смысл сначала заполнить временную таблицу, выполнить все действия которые требуются и потом вернуть результат.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33439661
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer:
Код после SELECT работать будет, если процедуру вызывать так:
Код: plaintext
1.
SELECT *
FROM StoredProcedure()
Почему не срабатывает, при CALL - не понятно, нужно будет к ним на форум вопрос задать.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33439667
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, проверил в ISQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE _Test ()
BEGIN
  SELECT *
  FROM Units;

  UPDATE Units
  SET Name = Upper(Name);
END;

CALL _Test ();
Вернулся исходный набор записей. Далее:
Код: plaintext
1.
SELECT *
FROM Units;
Все изменилось, как и полагается. После получения данных в DW с этой процедуры в PB стоит COMMIT ?
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33441121
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Я так понимаю, что в ДВ можно вернуть только
один, не обязательно первый.
Дык значит обработка все-таки до второго доходит ;)

А если их ISQL вызвать эту процедуру, отработает ли update после селекта?
Хотя возможно это PB так работает при вызове именно из DW. Дождавшись нужного ResultSet-а, просто обрубает выполнение процедуры, дабы не прокачивать следующие ResultSet-ы (если они есть). Тогда можно обработать через временные таблицы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin
...

select a,b,c
  into #temp
  from table;

update table2
     set d=f;

select * from into #temp;

end;
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442657
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Commit естественно есть, дело не в нем, можно и в среде ПБ потестить, там
автокоммит. Из ISQL тоже все работает. Причем я пользуюсь сишной версией, и
там после получения выборки из процедуры надо делать resume, тогда процедура
бежит дальше.
Здесь именно ПБ после получения набора с требуемым номером заканчивает
выполнение процедуры. Но у меня проблема в том, что код в процедуре должен
выполняться именно после передачи набора данных клиенту и времянки не
спасут.
В клиенте, который использует ADODB, делаю после получения набора, что-то
типа NextRecordSet. Это заставляет драйвер передать комманду серверу
продолжить выполнение процедуры до следующего возвращаемого набора, а
поскольку такого больше не встречается, то процедура завершает свою работу.
А вот как такое реализовать в ПБ, и именно в DW - не знаю. Единственное что
я нашел, можно регулировать номер возвращаемого набора, который будет
использован DataWindow'ом.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442668
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerА вот как такое реализовать в ПБ, и именно в DW - не знаю.
Тебе же уже ответил тов. ASCRUS - вызывай ХП не как ХП, а с помощью SELECT-а, благо у тебя ASA9 - она это умеет.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442672
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000 как всегда спешишь - людей насмешишь...
Четко написано, что нужно выполнение определенных действий ПОСЛЕ того, как
клиент получит набор из процедуры. И действия эти прописаны в той же
процедуре. Вызов select по процедуре не даст желаемого результата, т.к.
сначала выполнится процедура, а потом данные потекут на клиента(и не факт
что там окажутся). Я на форум с глупыми вопросами не лезу.
Просто мне не понятно, почему ПБ решил рубить выполнение процедуры после
получения результата.?! Это только мне так кажется, что это неправильно, или
это на самом деле не дело?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442741
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Dim2000 как всегда спешишь - людей насмешишь...
Четко написано, что нужно выполнение определенных действий ПОСЛЕ того, как
клиент получит набор из процедуры. И действия эти прописаны в той же
процедуре. Вызов select по процедуре не даст желаемого результата, т.к.
сначала выполнится процедура, а потом данные потекут на клиента(и не факт
что там окажутся). Я на форум с глупыми вопросами не лезу.
Я не очень понял хода Вашей мысли - почему это при SELECT * FROM SP() данные не потекут на клиента, не факт что там окажутся и зачем Вам так хочется, чтобы обязательно сначала PB получил данные от SELECT-а, а уж потом выполнилось UPDATE ?

P.S. И если так хочется, кто мешает SELECT и UPDATE по очереди из PB вызывать (к примеру сделать 2 ХП сделать) ?
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442788
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый ASCRUS! Я нисколько не сомневаюсь, что Вы способны реализовать данный функционал разными способами. Впрочем, как и я. Мне известны все предложенные выше варианты, но меня интересовал конкретный вопрос: можно ли, и как сделать DW на основе хп, в которой после выборки были определенные действия.
В процессе обсуждения я понял, что то что мне нужно - не реализуемо.
Теперь мой вопрос переформировался в вопрос: почему ПБ6.5 заканчивает выполнение хп после получения выборки? и так же ли ведут себя последующие версии?
P.S. Я понимаю, что на форуме так часто звучат простые вопросы, что видимо никто не вчитывается в суть вопроса, и считают что спрашивают какие-то банальности.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442801
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerDim2000 как всегда спешишь - людей насмешишь...
Нет.

Четко написано, что нужно выполнение определенных действий ПОСЛЕ того, как клиент получит набор из процедуры. И действия эти прописаны в той же
процедуре.
При вызове ХП с помощью SELECT клиент и получает данные, и выполняется то, что написано в ХП после возврата набора данных. Этого вполне достаточно. Слово "ПОСЛЕ" я вижу, но не считаю его существенным.

Я на форум с глупыми вопросами не лезу.
А этот топик тогда что?

Просто мне не понятно, почему ПБ решил рубить выполнение процедуры после
получения результата.?!
Он не рубит, он получает то, что хотел, и удовлетворяется этим.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442807
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЯ не очень понял хода Вашей мысли - почему это при SELECT * FROM SP() данные не потекут на клиента, не факт что там окажутся и зачем Вам так хочется, чтобы обязательно сначала PB получил данные от SELECT-а, а уж потом выполнилось UPDATE ?
А оно именно так и получается.

Код: plaintext
1.
2.
3.
4.
5.
CREATE PROCEDURE "DBA"."test"()
BEGIN
    select * from dba.table_sts where code_id =  2  ;
    update dba.table_sts set code_id =  3  where code_id =  2  ;
    print '-=Procedure completed=-'
END

select * from dba.test() выдаёт 1 строку при первом запуске и 0 при последующих. Ну и чего ещё надо?
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442839
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый ASCRUS! Я нисколько не сомневаюсь, что Вы способны реализовать данный функционал разными способами. Впрочем, как и я. Мне известны все предложенные выше варианты, но меня интересовал конкретный вопрос: можно ли, и как сделать DW на основе хп, в которой после выборки были определенные действия.
В процессе обсуждения я понял, что то что мне нужно - не реализуемо.
Теперь мой вопрос переформировался в вопрос: почему ПБ6.5 заканчивает выполнение хп после получения выборки? и так же ли ведут себя последующие версии?
P.S. Я понимаю, что на форуме так часто звучат простые вопросы, что видимо никто не вчитывается в суть вопроса, и считают что спрашивают какие-то банальности.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442850
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000, прошу прощения, но мне кажется ты не прав, на счет ПОСЛЕ. Это содержится в вопросе, если тебе хочется отвечать на измененные своим воображением вопросы, то это твое право. Но это не значит, что твои ответы являются ответами на заданный мной вопрос.
И раз меня интересует ПОСЛЕ, значит я так и ставлю вопрос. И меня не интересует селект по хп. Потому что уже объяснил, что сервер выполнит сначала хп (т.е. целиком вместе с теми действиями, которые должны быть выполнены после получения набора клиенту), и только потом начнет реально передавать их клиенту.
Примерно также как с кред. карты в банкомате списываются средства после их выдачи, а не до или в процессе.
А на счет рубит - именно рубит. Кто сказал, что цель вызова хп - получить первый набор? С чего это в sybase так решили, что дальше процедуры ничего не делают? Понятное дело, не нравится - не ешь, но я тут выступаю не с целью опустить ПБ, а с целью определится, это фича или баг.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442853
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, если Dim2000 очень хочется узнать для чего надо, то советую запустить вышеприведенную тестовую проц в isqlc.exe и параллельным клиентом посмотреть на содержание таблички(или попробывать запустить). Так вот, пока не выполните resume проц дальше не выполняется. А клиента пишут совсем другие люди и чтоб разграничить сферу ответственности нужно четкое разделение, это наше, это ваше. Курсор ли они забыли закрыть или еще чего - мне по фигу, раз отдал клиенту, значит мяч на их стороне, а до этого момента - на моей.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442890
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerDim2000, прошу прощения, но мне кажется ты не прав, на счет ПОСЛЕ. Это содержится в вопросе, если тебе хочется отвечать на измененные своим воображением вопросы, то это твое право.
Я, как сервер, переписываю запросы в своём воображении .
Потому что уже объяснил, что сервер выполнит сначала хп (т.е. целиком вместе с теми действиями, которые должны быть выполнены после получения набора клиенту), и только потом начнет реально передавать их клиенту.
Возможно. Но с точки зрения конечного результата это не имеет значения.
А на счет рубит - именно рубит. Кто сказал, что цель вызова хп - получить первый набор?
А он делает именно то, что ему сказали: получает первый набор. Если ему сказать фетчить 2-й набор - выругается, но "хвост" ХП выполнится.
С чего это в sybase так решили, что дальше процедуры ничего не делают?
А какие есть альтернативы нынешнему поведению?
Понятное дело, не нравится - не ешь, но я тут выступаю не с целью опустить ПБ, а с целью определится, это фича или баг.
IMHO - фича.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33442892
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerИ еще, если Dim2000 очень хочется узнать для чего надо, то советую запустить вышеприведенную тестовую проц в isqlc.exe и параллельным клиентом посмотреть на содержание таблички(или попробывать запустить). Так вот, пока не выполните resume проц дальше не выполняется.
Дык я это и так знаю ;). Но ответа на вопрос "для чего надо" я не увидел. Ну да ладно...
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33443111
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ответ:
"А клиента пишут совсем другие люди и чтоб разграничить сферу
ответственности нужно четкое разделение, это наше, это ваше. Курсор ли они
забыли закрыть или еще чего - мне по фигу, раз отдал клиенту, значит мяч на
их стороне, а до этого момента - на моей."
Расшифровываю:
Чтобы точно было известно, что клиентский софт такой-то, во столько-то, с
такого-то адреса получил такую-то выборку. А вот зачем нужно именно это
знать - уже в данном вопросе не важно. Бывает, что эта информация важна и
точка.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33443282
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать это протоколирование вынести в отдельную процедуру и делаеть ее вызов в основной после выборки данных, типа как POST EVENT в PowerBuilder? Может прокатит?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
begin
...
select a,b,c,
from table;

call update_proc();

end;
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33443467
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не поможет. Управление на после-селект не доходит, и там не важно какие
действия совершаются... Нужно менять способ вызова, без DW.
У меня один вопрос остался, на следующих ПБ, после 6.5 такая же ситуация?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33443479
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все таки я хоть убей не могу понять, чем в ХП SELECT, UPDATE отличается от UPDATE, SELECT с точки зрения вызова ХП с клиентской части (PB или еще чего). Мне кажется Вы просто ищете проблемы на ровном месте. Потому как:
авторЧтобы точно было известно, что клиентский софт такой-то, во столько-то, с
такого-то адреса получил такую-то выборку. А вот зачем нужно именно это
знать - уже в данном вопросе не важно. Бывает, что эта информация важна и
точка.
Если он ее не получит, будет сделан ROLLBACK и UPDATE, который был сделан перед SELECT-ом откатиться, что будет означать, что клиент не получил выборку, что и было не зафиксированно. И это будет абсолютно правильно с точки зрения транзакций. А вот как раз то, что Вы пытаетесь сделать и есть не правильно, так как клиент может получить выборку и прервать выполнение процедуры, сделав до кучи ROLLBACK, таким образом выборку он получит, а на сервере это не зафиксируется.
...
Рейтинг: 0 / 0
Stored procedure & Multi Result Set
    #33445062
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Нет, не поможет. Управление на после-селект не доходит, и там не важно какие
действия совершаются... Нужно менять способ вызова, без DW.
У меня один вопрос остался, на следующих ПБ, после 6.5 такая же ситуация?

Безусловно, а как может быть иначе?
Если вы делаете DW основанное на хранимой процедуре - ваша ЕДИНСТВЕННАЯ цель - получить result set .
Если вы хотите, чтоб ваша ХП совершала ДЕЙСТВИЯ, а не возвращала result set - ЗОВИТЕ её, а не стройте DW на ней.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Stored procedure & Multi Result Set
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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