2009-09-18 4 views
6

私のDBAはSybaseデータベースにストアドプロシージャを構築しましたが、その定義はありません。 私はそれを実行すると、一連の列と値で結果セットを返します。結果セットの行を減らすためにさらにSELECTしたいと思います。これは可能ですか?Sybaseのストアドプロシージャから選択するにはどうすればよいですか?

this question私は一時テーブルに結果を挿入できるようですが、私はこれを行う権限を持っているのか分かりません。

特定の行を選択する方法はありますか?そうでない場合は、誰かが一時テーブルを使ってシミュレーションするためのコード例を教えてもらえますか?

答えて

2

ストアドプロシージャを変更するようDBAに依頼する必要があります。

のSybase IQの下であなたが

2

私が知る限り、これはSybase ASEでは不可能です。使用しても

insert #temp_table 
exec my_procedure 

(少なくともsybase 12.xでは)動作しません。

2

をしたい行だけを返すために、その一時テーブルに選択し、プレーンが選択よりも、あなたはそれが一時的なテーブルの評価者に結果を選択するように変更を取得でき、その後、あなたがあなた自身を書くことができます(12.6少なくともそれ以上の場合)、ストアドプロシージャから選択し、結果をテーブルのようにフィルタリングできます。私はASEやASAの下でこれが動作するかどうかわかりませんが、試してみることができます。

ストアドプロシージャーがmyprocの場合、結果セットにはACTIVEという列があります。この列は0または1のいずれかで、ACTIVE = 1の行のみを選択します。あなたも

SELECT t1.name ...派生テーブルとしてこれを使用して、このような例のための他のテーブルでそれに参加することができIQの下

SELECT * FROM MYPROC()ACTIVE = 1

一種のニートで、tbl_atable t1から 活性t1.address、T2、 ()(MYPROC SELECT * FROM WHERE ACTIVE = 1)T2 WHERE t1.active = t2.active

...!

私はこれまでのバージョンのSybaseを動作させたいと思っています。

2

ASEでは可能ですが、CISとプロキシテーブルを使用するとかなりラウンドアバウトな方法があります。私は一度好奇心として、それを試してみたし、実際にそれが仕事をし

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

:メカニズムはロブVerschoorのサイトに非常によく説明しています。私はエラー処理の難しい問題を掘り下げませんでした。

のSybase ASEでpjjH

+0

ありがとうございます。 Sybase ASEは厄介です。 –

3

、私たちは "代理テーブル" を経由して、ストアドプロシージャから選択するには、このハックを使用することができます。

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

だけ思い。

おそらくDBAは、ストアドプロシージャの代わりにビューを準備することができます。なぜなら、何かの理由で内部のものを見たり、心配したりしないようにしたいと思うかもしれません。

もう1つの方法は、sp_helptextを使用してストアドプロシージャのテキスト(暗号化されていない場合)を表示し、独自の目的(例:ビュー)に書き換えて結果セットに追加の条件付けを適用できるようにすることです。

のSybase IQでは
0

、あなたがこれを行うことができます:

>は< sp_nameから< COL1>、< COL2>を選択します( '< sp_arg>')ここで、<述語>

例:

sp_iqindexinfo( 'table xyz')の '%col1_indx%'のようなオブジェクトで、ObjSizeを選択してください

関連する問題