Sybase ASE15に取り組んでいます。このようなものを探しています
Select * into #tmp exec my_stp;
my_stpは、各行に2つの列を持つ10個のデータ行を返します。
ASE 15では、関数を使用できると思いますが、複数行のデータセットには役立ちません。
ストアドプロシージャが「どこかからcol1、col2を選択」してデータを返している場合、そのデータを取得する方法はなく、クライアントに逆流するだけです。
できることは、データを一時テーブルに直接挿入することです。これは、sproc内に一時テーブルを作成する場合と同じように少し注意が必要です。これは、sprocの実行が終了し、内容が表示されなくなると削除されます。このための秘訣は、sprocの外部に一時テーブルを作成することですが、それをsprocから参照することです。ここで難しいのは、sprocを再作成するたびに、一時テーブルを作成する必要があるということです。そうしないと、「テーブルが見つかりません」というエラーが発生します。
--You must use this whole script to recreate the sproc
create table #mine
(col1 varchar(3),
col2 varchar(3))
go
create procedure my_stp
as
insert into #mine values("aaa","aaa")
insert into #mine values("bbb","bbb")
insert into #mine values("ccc","ccc")
insert into #mine values("ccc","ccc")
go
drop table #mine
go
コードを実行するには:
create table #mine
(col1 varchar(3),
col2 varchar(3))
go
exec my_stp
go
select * from #mine
drop table #mine
go
私はちょうどこの問題に直面しました、そして決して遅くなるよりはましです...
それは実行可能ですが、別のローカルまたはリモートオブジェクト(テーブル、プロシージャ、ビュー)の代用であるSybase " プロキシテーブル "を含む、お尻の巨大な痛み。以下は12.5で動作しますが、新しいバージョンの方がうまくいくと思います。
次のように定義されたストアドプロシージャがあるとします。
create procedure mydb.mylogin.sp_extractSomething (
@timestamp datetime) as
select column_a, column_b
from sometable
where timestamp = @timestamp
最初にtempdbに切り替えます。
use tempdb
次に、列が結果セットと一致するプロキシテーブルを作成します。
create existing table myproxy_extractSomething (
column_a int not null, -- make sure that the types match up exactly!
column_b varchar(20) not null,
_timestamp datetime null,
primary key (column_a)) external procedure at "loopback.mydb.mylogin.sp_extractSomething"
注意点:
次に、このようなテーブルから独自のデータベースから選択できます。
declare @myTimestamp datetime
set @myTimestamp = getdate()
select *
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
これは十分に簡単です。次に、一時テーブルに挿入するには、最初にそれを作成します。
create table #myTempExtract (
column_a int not null, -- again, make sure that the types match up exactly
column_b varchar(20) not null,
primary key (column_a)
)
そして組み合わせる:
insert into #myTempExtract (column_a, column_b)
select column_a, column_b
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp