私のDBAは、Sybaseデータベースにストアドプロシージャを構築しましたが、その定義はありません。これを実行すると、列と値のセットを含む結果セットが返されます。結果セットの行を減らすために、さらにSELECTを実行したいと思います。これは可能ですか?
この質問から、結果を一時テーブルに挿入できるようですが、これを行うための権限があるかどうかはわかりません。
特定の行を選択する方法はありますか?そうでない場合は、一時テーブルでシミュレートするためのサンプルコードを教えてもらえますか?
私のDBAは、Sybaseデータベースにストアドプロシージャを構築しましたが、その定義はありません。これを実行すると、列と値のセットを含む結果セットが返されます。結果セットの行を減らすために、さらにSELECTを実行したいと思います。これは可能ですか?
この質問から、結果を一時テーブルに挿入できるようですが、これを行うための権限があるかどうかはわかりません。
特定の行を選択する方法はありますか?そうでない場合は、一時テーブルでシミュレートするためのサンプルコードを教えてもらえますか?
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
Sybase IQ(少なくとも12.6以降)では、ストアドプロシージャから選択して、テーブルであるかのように結果をフィルタリングできます。これがASEまたはASAで機能するかどうかはわかりませんが、試してみることができます。
したがって、ストアドプロシージャがmyprocと呼ばれる場合、結果セットには0または1のいずれかであるACTIVE列があり、ACTIVE=1行のみを選択する場合にこれを行うことができます。
SELECT * FROM myproc()WHERE ACTIVE = 1
IQの下では、これを派生テーブルとして使用し、たとえばこのような他のテーブルと結合することもできます...
SELECT t1.name、t1.address、t2、active FROM tbl_atable t1、(SELECT * FROM myproc()WHERE ACTIVE = 1)t2 WHERE t1.active = t2.active
...これはちょっといいです!
実行しているSybaseのどのバージョンでも機能することを願っています。
私の知る限り、これはSybaseASEでは不可能です。使っても
insert #temp_table
exec my_procedure
動作しません(少なくともsybase 12.xでは)。
ストアドプロシージャを変更するようにDBAに依頼する必要があります。
結果をプレーン選択よりも一時テーブル評価者に選択するように変更してから、その一時テーブルに独自の選択を記述して、必要な行のみを返すことができます。
ASEで可能ですが、CISとプロキシテーブルを使用するというかなり回りくどい方法です。このメカニズムは、RobVerschoorのサイトで非常によく説明されています。
http://www.sypron.nl/proctab.html
私は好奇心として一度試してみましたが、実際に機能します。私はエラー処理のトリッキーな質問を掘り下げませんでした。
pjjH
ちょっとした考え。
おそらく、DBAは、何らかの理由で内部のものを見たり心配したりしないようにしたい場合は、ストアドプロシージャの代わりにビューを準備することができます。
別のアプローチは、sp_helptextを使用して(暗号化されていない場合)ストアドプロシージャテキストを表示し、結果セットに追加の条件を適用できるように、独自の目的(ビューなど)に書き換えることです。
Sybase IQでは、次のことができます。
<sp_name>('<sp_arg>')から<col1>、<col2>を選択します。ここで<predicate>
例:
sp_iqindexinfo('table xyz')からObject、DbspaceName、ObjSizeを選択します。ここで、Object like'%col1_indx%'