Ich arbeite an sybase ASE 15. Ich suche etwas wie dieses
Select * into #tmp exec my_stp;
my_stp liefert 10 Datenzeilen mit zwei Spalten in jeder Zeile.
Ich arbeite an sybase ASE 15. Ich suche etwas wie dieses
Select * into #tmp exec my_stp;
my_stp liefert 10 Datenzeilen mit zwei Spalten in jeder Zeile.
In ASE 15 kann man, glaube ich, Funktionen verwenden, aber sie werden bei mehrzeiligen Datensätzen nicht helfen.
Wenn Ihr gespeicherter Prozess Daten mit einem "select col1,col2 from somewhere" zurückgibt, gibt es keine Möglichkeit, diese Daten zu erfassen, sie fließen einfach zurück zum Client.
Sie können die Daten jedoch direkt in die temporäre Tabelle einfügen. Dies kann ein wenig schwierig sein, denn wenn Sie die temporäre Tabelle innerhalb des Sprocs erstellen, wird sie gelöscht, sobald der Sproc ausgeführt wird, und Sie bekommen den Inhalt nicht zu sehen. Der Trick besteht darin, die temporäre Tabelle außerhalb des Sprocs zu erstellen, sie aber im Sproc zu referenzieren. Die Schwierigkeit dabei ist, dass Sie jedes Mal, wenn Sie die Sproc neu erstellen, die temporäre Tabelle erstellen müssen, sonst erhalten Sie die Fehlermeldung "Tabelle nicht gefunden".
--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
Die, um den Code auszuführen:
create table #mine
(col1 varchar(3),
col2 varchar(3))
go
exec my_stp
go
select * from #mine
drop table #mine
go
Ich bin gerade mit diesem Problem konfrontiert worden, und besser spät als nie...
Es ist machbar, aber eine ungeheure Arbeit, die eine Sybase " Proxy-Tabelle ", das für ein anderes lokales oder entferntes Objekt (Tabelle, Prozedur, Ansicht) steht. Das Folgende funktioniert in 12.5, neuere Versionen haben hoffentlich einen besseren Weg, dies zu tun.
Nehmen wir an, Sie haben einen Stored Proc definiert als:
create procedure mydb.mylogin.sp_extractSomething (
@timestamp datetime) as
select column_a, column_b
from sometable
where timestamp = @timestamp
Wechseln Sie zunächst zur tempdb:
use tempdb
Erstellen Sie dann eine Proxy-Tabelle, deren Spalten mit der Ergebnismenge übereinstimmen:
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"
Bemerkenswerte Punkte:
Sie können dann aus der Tabelle wie folgt aus Ihrer eigenen Datenbank auswählen:
declare @myTimestamp datetime
set @myTimestamp = getdate()
select *
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
Das ist eigentlich ganz einfach. Um dann in eine temporäre Tabelle einzufügen, erstellen Sie diese zuerst:
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)
)
und kombinieren:
insert into #myTempExtract (column_a, column_b)
select column_a, column_b
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Wenn Sie mit Sybase arbeiten, warum haben Sie die Frage mit mysql gekennzeichnet?
0 Stimmen
Zu Ihrer Information: Sybase ist ein Unternehmen nicht ein Datenbankprodukt. Sprechen Sie über ASE, SQL Anywhere oder Sybase IQ?
0 Stimmen
Ich fühle Ihren Schmerz. Unter ASE scheint es keine einfache Lösung für dieses Problem zu geben. Entweder Sie ändern die s/p, oder erstellen sie neu inline. Ich dachte, es gäbe eine Möglichkeit, ein s/p "in" eine temporäre Tabelle laufen zu lassen (OHNE das s/p zu modifizieren!), aber ich kann sie nicht finden. *** Die Jungs bei Sybase müssen wohl mit einem PostgreSQL-Handbuch oder so geschlagen werden. Verflixt, ich mache mich auf den Weg, um ein ansonsten nutzloses s/p zu duplizieren, denke ich. *** Ich würde wirklich gerne wissen, ob dieses Problem jemals gelöst wird (außerhalb von SQL Anywhere).