Je viens juste face à ce problème, et mieux vaut tard que jamais ...
Il est faisable, mais une douleur monstrueuse dans le cul , impliquant un Sybase "proxy table" qui est un standin pour un autre objet local ou distant (table, procédure, vue). Les travaux suivants en 12.5, les versions plus récentes, espérons avoir une meilleure façon de le faire.
Disons que vous avez une procédure stockée définie comme:
create procedure mydb.mylogin.sp_extractSomething (
@timestamp datetime) as
select column_a, column_b
from sometable
where timestamp = @timestamp
Mettez d'abord à la tempdb:
use tempdb
Ensuite, créez une table proxy où les colonnes correspondent à l'ensemble des résultats:
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"
Points de repère:
- « réalimentation » est l'équivalent Sybase de localhost, mais vous pouvez remplacer pour tout serveur enregistré dans la table sysservers du serveur .
- Le paramètre _timestamp est traduit en @timestamp lorsque Sybase exécute la procédure stockée, et toutes les colonnes de paramètres déclarées comme ceci doivent être définies comme nulles.
Vous pouvez alors choisir de la table comme celui-ci à partir de votre propre db:
declare @myTimestamp datetime
set @myTimestamp = getdate()
select *
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
Ce qui est assez simple. Pour ensuite insérer dans une table temporaire, créez d'abord:
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)
)
et se combinent:
insert into #myTempExtract (column_a, column_b)
select column_a, column_b
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
Si vous travaillez sur Sybase, pourquoi avez-vous étiqueter la question avec mysql? –
FYI Sybase est une entreprise * et non un produit de base de données. Parlez-vous d'ASE, de SQL Anywhere ou de Sybase IQ? –
Je ressens votre douleur. Sous ASE, il semble n'y avoir aucune solution facile à cela. Vous pouvez soit modifier le s/p, soit le recréer en ligne. Je pensais qu'il y avait un moyen d'exécuter un s/p "dans" une table temporaire (SANS modifier le s/p!), Mais je ne peux pas le trouver. *** Les gars de Sybase doivent être battus avec un manuel PostgreSQL ou quelque chose, je suppose. Drat, off pour reproduire un s/p autrement inutile je suppose. *** J'aimerais vraiment savoir si cela sera résolu (en dehors de SQL Anywhere). – Roboprog