|
|
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня! Есть ASE 12.5. Я в процессе изучения TSQL. В документации по TSQL написано, что хранимая возвращает только (1) return status, (2) return parameters. Но не написано, что она может возвращать record set. Действительно, вызывая процедуру из другой процедуры я не могу использовать "возвращаемые" рекордсеты. Только при вызове процедуры из клиента я могу их получить. Известно, что рекордсеты "возвращаются" select-ом. Мне интересен механизм возврата рекордсета, а именно, в какой поток процедура "печатает" рекордсет (stdout?) и будут-ли проблемы, если я после select вызову print, который что-то напечатает в тот же поток не в формате TDS. Использует-ли print другой поток вывода? Интересно получить развернутую информацию или какие-нибудь ссылки по вопросу. Заранее всем спасибо, Виталий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 14:18 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Причем тут stdout поток и хранимые процедуры не понятно. Если хотите рекордсет ХП использовать в другой ХП, то только через временные таблицы, которые создаются в вызывающей ХП, а зполняются в вызываемой ХП. все наши на www.corba.kubsu.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 14:42 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. Не очень понятно, как сервер возвращает рекордсеты клиенту и что будет, если в процедуре я выполню select и print. Как клиент обработает результат команды print? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 14:53 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
print идет на клиента так-же как ошибки сервера, в виде текстовых сообщений. всё остальное это резалтсеты разных типов. никакого stdout нет. разве-что вы рассматриваете как работает isql. из процедуры в процедуру можно вернуть только RETURN и OUT ПАРАМЕТРЫ. из процедуры написанной на яве (в 12.5 нужна отдельная лицензия) можно получить все виды резалтсетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 15:25 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Правильно-ли я понимаю, что существуют несколько "каналов" передачи информации от сервера? По-одному каналу клиенту передаются рекордсеты, а по другому - сообщения (об ошибке и просто вывод) и ни никак не связаны. stdout я упомянул в том смысле, что sybase мог бы выдавать всю информацию в стандартный вывод, как делают многие программы под unix, а клиент интерпретирует эту информацию. Это мне навеял isql и AquaData Studio, в которых все сообщения и рекордсеты выводятся в одно и то же окно. Вообще, интересно почитать об этом более подробно. Буду рад, если приведете ссылки на такого рода информацию. И еще, интересно, какие виды рекордсетов бывают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 15:47 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
да. все верно. вот ссылка а лучше (по моему) посмотреть стандартные ASE samples (C/C++) и почитать include ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 16:57 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 18:13 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
davydoff пишет: > написано, что хранимая возвращает только (1) return status, (2) return > parameters. Но не написано, что она может возвращать record set. Ну действительно. А еще там не написано, что в ней можно писать IF-ы, WHILE-ы и она ВООБЩЕ МОЖЕТ работать. Дело в том, что вернуть из процедуры набор данных - это настолько естественно и понятно для всех разработчиков на TSQL, что про это, видимо, просто не сочли нужным написать. Вы просто в любом месте процедуры пишите SELECT, и он будет передан клиенту (ну если он не в переменные, конечно). Наборов данных таких может быть сколько угодно. > Действительно, вызывая процедуру из другой процедуры я не могу > использовать "возвращаемые" рекордсеты. А это практически почти невозможно в ASE, к сожалению или счастью. Только при вызове процедуры из > клиента я могу их получить. Да. Почти так. На самом деле поищите по форуму типа "select из процедуры" должно быть дофига понаписано про это. > select-ом. Мне интересен механизм возврата рекордсета, а именно, в какой > поток процедура "печатает" рекордсет (stdout?) Все, в том числе наборы данных, передаются клиенту по спец. протоколу, называемому TDS. и будут-ли проблемы, если > я после select вызову print, который что-то напечатает в тот же поток Нет, не будут. > не в формате TDS. Невозможно что-то "напечатать не в формате TDS" Использует-ли print другой поток вывода? Нет, тот же TDS. Кстати, если интересно, Sybase наконец-то опубликовал его спецификацию, она доступна всем теперь. Интересно > получить развернутую информацию или какие-нибудь ссылки по вопросу. Зачем бы ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 21:23 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
davydoff пишет: > Правильно-ли я понимаю, что существуют несколько "каналов" передачи > информации от сервера? Нет, неправильно. "Канал" только один. Но двунаправленный. По-одному каналу клиенту передаются рекордсеты, а > по другому - сообщения (об ошибке и просто вывод) и ни никак не связаны. Нет, они передаются последовательно, сначала одни, потом другие, потом могут снова первые, и т.д. > stdout я упомянул в том смысле, что sybase мог бы выдавать всю > информацию в стандартный вывод, как делают многие программы под unix, а > клиент интерпретирует эту информацию. Нет, там по сети происходит взаимодействие, и все гораздо сложнее. А в stdout сервер обычно пишет свой лог. Это мне навеял isql и AquaData > Studio, в которых все сообщения и рекордсеты выводятся в одно и то же > окно. Это зависит от клиента, как он это делает. Посмотрите на SQLAdvantage например, там два режима есть. Вообще, интересно почитать об этом более подробно. Буду рад, если > приведете ссылки на такого рода информацию. И еще, интересно, какие виды > рекордсетов бывают? много. Это - из заголовка OpenClient. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 21:29 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
MasterZiv> Действительно, вызывая процедуру из другой процедуры я не могу > использовать "возвращаемые" рекордсеты. А это практически почти невозможно в ASE, к сожалению или счастью."К сожалению", "к сожалению"... Ты просто не представляешь как это удобно обращаться к хранимке как к таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 21:35 |
|
||
|
Возвращение рекордсета (recordset) их хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > "К сожалению", "к сожалению"... > Ты просто не представляешь как это удобно обращаться к хранимке как к > таблице. Я представляю. А еще я представляю как ты обрезаешь все возможности стоить планы оптимизатору. И еще всякие гадости. В общем - вопрос спорный. Конечно, если фича есть, ею можно не пользоваться, или пользоваться аккуратно, т.е. лучше, чтобы она была бы. Но почему-то ее упорно ASE не делает. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 23:37 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=51&tid=2011547]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 334ms |

| 0 / 0 |
