2009-09-18 3 views
6

My DBA создал мне хранимую процедуру в базе данных Sybase, для которой у меня нет определения. Если я запустил его, он возвращает набор результатов с набором столбцов и значений. Я бы хотел, чтобы SELECT далее уменьшал строки в наборе результатов. Это возможно?Как выбрать из хранимой процедуры в Sybase?

От this question кажется, что я мог вставлять результаты во временную таблицу, но я не уверен, что у меня есть разрешения на это.

Есть ли способ, которым я могу выбрать определенные строки, или если нет, может ли кто-нибудь дать мне пример кода для моделирования с помощью временной таблицы?

ответ

2

Вам нужно будет попросить администратор базы данных изменить хранимую процедуру.

Вы можете получить его изменили, чтобы выбрать результаты во временную таблицу оценщик, чем равнинной выбрать, а затем вы можете написать свой собственный выбор на этой темп таблицы вернуть только те строки, которые вы хотите

2

Насколько я знаю, это невозможно в Sybase ASE. Даже с использованием

insert #temp_table 
exec my_procedure 

не работает (по крайней мере, на sybase 12.x).

2

Под Sybase IQ (12,6 и выше, по крайней мере) вы можете выбрать из хранимой процедуры и фильтровать результаты, как если бы это была таблица. Я не знаю, работает ли это под ASE или ASA, но вы можете попробовать.

Так что если хранимая процедура называется myproc, в результирующем наборе есть столбец ACTIVE, который может быть 0 или 1, и вы хотите выбрать только ACTIVE = 1 строки, которые вы могли бы сделать.

SELECT * FROM MyProc() WHERE ACTIVE = 1

Под IQ вы также можете использовать это в качестве производной таблицы и объединить его с другими таблицами, например, как это ...

ВЫБРАТЬ t1.name , t1.address, t2, активный оТ tbl_atable t1, (SELECT * FROM MyProc() WHERE ACTIVE = 1) t2 WHERE t1.active = t2.active

..., который является своего рода аккуратный!

Я надеюсь, что работает, для которой когда-либо была версия Sybase.

2

Это возможно с ASE, но с довольно крутым видом, используя таблицы CIS и прокси. Механизм описан очень хорошо на сайте Роба Verschoor в:

http://www.sypron.nl/proctab.html

Я попробовал один раз, как любопытство и это действительно работает. Я не вникал в сложный вопрос об обработке ошибок.

pjjH

+0

Спасибо, это работает. Sybase ASE - это бонкеры. –

3

В Sybase ASE, мы можем использовать этот хак, чтобы выбрать из хранимой процедуры с помощью "прокси таблицы":

http://www.sypron.nl/proctab.html

Пример:

sp_addserver loopback, null, @@servername 
go 

create existing table 
sp_test12 (
    Document_Name varchar(100), 
    Required_Status varchar(5), 
    Doc_ID varchar(10), 
    OrderBy int, 
    No_of_Copy_Retain int, 
    _p_EPEB_ID varchar(10) null, 
    _p_MY_NAME varchar(3) null, 
    _p_MY_NO varchar(10) null, 
    _p_EPEB_EDATE datetime null, 
    _TXN varchar(10) null, 
    _SUBTXN varchar(15) null, 
    _OwnType_ID1 varchar(5) null, 
    _OwnType_ID2 varchar(5) null, 
    _blnflag int null 
) 
external procedure 
at 'loopback.MYDB.dbo.usp_xyz' 
go 

select 
Doc_ID, No_of_Copy_Retain, _p_EPEB_ID, _p_EPEB_ID, _p_MY_NAME, _p_MY_NO 
from #sp_test12 
where 
    _p_EPEB_ID='EPEB1508' 
    and _p_MY_NAME='107' 
    and _p_MY_NO='2011000045' 
    and _p_EPEB_EDATE='2011-01-15 15:03:03.0' 
    and _TXN='TX012' 
    and _SUBTXN='TX012.001' 
    and _OwnType_ID1='ASSN' 
    and _OwnType_ID2='ASSN' 
    and _blnflag=0 
go 
+1

Это работает. Sybase - это бонкеры. –

1

Просто мысль.

Возможно, ваш администратор базы данных может подготовить представление вместо хранимой процедуры, если он хочет, чтобы вы почему-то не смотрели на внутренний материал или не беспокоились об этом.

Другим подходом было бы увидеть текст хранимой процедуры (за исключением зашифрованного) с помощью sp_helptext и переписать его для ваших собственных целей (например, в виде), чтобы иметь возможность применить дополнительную настройку к набору результатов.

0

В Sybase IQ, вы можете сделать это:

выберите < col1>, < Col2> от < sp_name> ('< sp_arg>'), где < предикат>

Пример:

выберите Object, DbspaceName, ObjSize из sp_iqindexinfo ('table xyz'), где Object как '% col1_indx%'

Смежные вопросы