powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выборка из таблицы данных, которые возвращает процедура
3 сообщений из 3, страница 1 из 1
Выборка из таблицы данных, которые возвращает процедура
    #35024491
misternew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sybase ASE 12.5.3

Собственно вопрос...
Есть процедура, которая выдает данные...
Можно ли каким-нибудь образом в Sybase сделать запрос вида:

select *
from (exec ПРОЦЕДУРА) as test

Т.е. хотелось бы, чтобы была возможность обработки данных из значений, возвращаемых процедурой...
...
Рейтинг: 0 / 0
Выборка из таблицы данных, которые возвращает процедура
    #35024537
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/faq/faq_topic.aspx?fid=438
...
Рейтинг: 0 / 0
Выборка из таблицы данных, которые возвращает процедура
    #35024653
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать обойти ограничение используя временную таблицу.

Создать процедуру :


create table #t -- обязательно в той же сессии иначе процедура не скомпилится
go

create procedure dbo. test_proc
@param1
...

@param x
as

select ....
from....
into #t

go


Далее использовать результаты процедуры в запросах:

create table #t
go


exec dbo.test_proc -- процедура наполнит таблицу данными

далее можно если нужно создать индекс на #t,
ну и собственно select * from #t

При таком подходе Вы можете даже наполнить временную таблицу какими-то данными до вызова процедуры и потом в процедуре их проанализировать и в зависимости от логики изменить или добавить новые записи.

Есть всё правильно сделать работать будет быстро.

По поводу варианта с прокси таблицами Вы можете посмотреть этот топик:
/topic/477708&hl=

KruДобрый день,
можно всё-таки попробовать сделать через прокси таблицу. У меня дома ASE 15 стоит и эксперемент до конца не удался из-за лицензионной ругани. На 12.5 может быть и получится.
Я попробовал на следующей задачке:
Есть таблица test1 с 2мя столбцами и есть таблица test2 с 3мя стобцами. Все int.
Требуется сделать insert в test2 из test1 так чтобы в test2.a добавлялись значения из test1.a, в test2.b значения из test1.b и в test2.c некоторая функция вставляла бы произведение стобцов a и b из test1.
Прошу прощения, если пишу криво -- устал после работы
Создаём временные таблицы:
use pubs2
go

create table dbo.test1 (a int, b int)
go
insert into dbo.test1 values (1,1)
insert into dbo.test1 values (1,2)
insert into dbo.test1 values (1,3)
insert into dbo.test1 values (2,2)
insert into dbo.test1 values (2,3)
go
create table dbo.test2 (a int, b int, c int)
go
создаём процедуру умножения
create procedure dbo.mathtutor1
@mult1 int , @mult2 int
as
select @mult1 * @mult2 as res
go

Теперь по поводу loopbsck сервера. В ASE15 при установке создаётся loopback c именем loopback.
В 12.5 такого сервера, насколько я помню, нет.
Его нужно создать: sp_addserver \'loopback\', null, \'your_local_server_name\'

Дальше создаётся прокси таблица "смотрящая" на процедуру.
Я переконектился к северу на всякий случай, хотя может быть необязательно.

create existing table dbo.func_subst_mathtutor
(res int
, _mult1 integer null -- Важно, поле должно позволять Null
,_mult2 integer null)
external procedure
at \'loopback.pubs2.dbo.mathtutor1\'

На моей 15шке команда прошла. Надеюсь, что на 12.5 тоже пройдёт, хотя RPC штука хитрая, может быть какую-нибудь лицензию попросит.

Если получится, то последняя команда:
insert into test2
select a,b,res
from test1 t
inner join func_subst_mathtutor1 m
on t.a = m._mult1 and t.b = m._mult2

(Это эквивалент insert into test2 select a,b, function(a,b) from test1)

Здесь у меня, к сожалению, выскочила ошибка 5629 - судя по описанию, это какие-то лицензионные дела. Может быть в 12.5 пройдйт нормально.

Попробуйте.
Если получится, напишите.

Напоследок. У меня был случай когда только таким неудобным образом удалось решить задачу. Я тогда на 12.5 работал и помню, что какие-то проблемы с RPC возникали, но администратор что-то подкрутил и всё заработало. Производительность была плохая, но там случай был сложный и вопрос стоял либо так либо никак.

Удачи
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выборка из таблицы данных, которые возвращает процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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