इसमैं संग्रहित प्रक्रिया से डेटा को एक temp तालिका में कैसे प्राप्त कर सकता हूं?
Select * into #tmp exec my_stp;
my_stp प्रत्येक पंक्ति में दो कॉलम के साथ 10 डेटा पंक्तियों रिटर्न की तरह कुछ के लिए खोज रहे Sybase एएसई 15. पर काम कर रहा हूँ।
इसमैं संग्रहित प्रक्रिया से डेटा को एक temp तालिका में कैसे प्राप्त कर सकता हूं?
Select * into #tmp exec my_stp;
my_stp प्रत्येक पंक्ति में दो कॉलम के साथ 10 डेटा पंक्तियों रिटर्न की तरह कुछ के लिए खोज रहे Sybase एएसई 15. पर काम कर रहा हूँ।
Sybase के बारे में निश्चित है, लेकिन एसक्यूएल सर्वर में निम्नलिखित काम करना चाहिए:
सम्मिलित #tmp (col1, col2, col3 ...) कार्यकारी my_stp जांच
धन्यवाद वैलेरियन। यह sybase में काम नहीं करता है। – user21246
आप चाहे राज्य नहीं है ' संग्रहीत प्रक्रिया एक से अधिक मान देता है। यह केवल एक मान देता है, तो आप निम्न कर सकते हैं: अपने एसपी मूल्य से अधिक रिटर्न
--create store procedure
create procedure sp_returnOne
as
BEGIN
return 1
END
--create temp table
create table #tt (
col1 int null
)
--populate temp table #tt with stored procedure
declare @result int
exec @result = sp_returnOne
insert into #tt values (@result)
select * from #tt
drop table #tt
तो आप एसपी में उत्पादन चर निर्धारित करना होगा। Sybase मैनुअल http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/44105;pt=44072
से "एक संग्रहीत प्रक्रिया कई मूल्यों लौट सकते हैं;।। प्रत्येक संग्रहीत प्रक्रिया में और बुला बयान में एक आउटपुट चर के रूप में परिभाषित किया जाना चाहिए उत्पादन कीवर्ड कार्यकारी बाहर को संक्षिप्त किया जा सकता है myproc @a = @myvara out, @b = @myvarb बाहर "
आप यह नहीं कहते कि आप किस sybase पर काम कर रहे हैं। उपरोक्त सभी एएसई 12.5 के लिए मान्य है।
Sybase एसक्यूएल कहीं भी में,
INSERT INTO #tmp (col1,col2,col3...) select * from my_stp()
isql के तहत काम नहीं करता है :( – Arkadiy
एएसई 15 में मेरा मानना है कि आप कार्यों का उपयोग कर सकते हैं, लेकिन वे multirow डेटासेट के साथ मदद करने के लिए नहीं जा रहे हैं।
यदि आपकी संग्रहित प्रो "किसी अन्य से col1, col2 का चयन करें" के साथ डेटा लौटा रही है तो उस डेटा को पकड़ने का कोई तरीका नहीं है, यह सिर्फ क्लाइंट पर वापस बहता है।
आप क्या कर सकते हैं डेटा सीधे डेटा तालिका में डालें। यह थोड़ा मुश्किल हो सकता है जैसे कि आप स्पोक के भीतर अस्थायी तालिका बनाते हैं, जब स्पोक खत्म हो जाने के बाद इसे हटा दिया जाता है और आपको सामग्री देखने को नहीं मिलता है। इसके लिए चाल स्पोक के बाहर अस्थायी तालिका बनाना है, लेकिन इसे स्पोक से संदर्भित करना है। यहां कड़ी बात यह है कि हर बार जब आप स्पोक को फिर से बनाते हैं तो आपको अस्थायी तालिका बनाना होगा, या आपको "तालिका नहीं मिली" त्रुटियां मिलेंगी।
--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
मैं सिर्फ इस समस्या का सामना करना पड़ा है, और कभी नहीं की तुलना में बेहतर देर हो गई ...
यह संभव है, लेकिन बट में एक राक्षसी दर्द , जिसमें एक साइबेस "proxy table" शामिल है जो एक अन्य स्थानीय या दूरस्थ वस्तु (तालिका, प्रक्रिया, दृश्य) के लिए एक स्टैंडिन है। निम्नलिखित 12.5 में काम करता है, नए संस्करणों का उम्मीद है कि इसे करने का बेहतर तरीका है।
मान लीजिए कि आप एक संग्रहीत proc के रूप में परिभाषित किया है दो:
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
यह चयनित कथन में '_extractTimestamp' के बजाय' _timestamp' होना चाहिए। इसे 'मौजूदा तालिका बनाने' में परिभाषित कॉलम से मेल खाना चाहिए। – jack3694078
अपडेट किया गया, धन्यवाद। –
my_stp कंप्यूटिंग विभिन्न तालिकाओं से मूल्यों से डेटा को आबाद करने है, तो आप जो वास्तव में करता है एक बराबर दृश्य बना सकते हैं my_stp जैसा ही है।
CREATE VIEW My_view
AS
/*
My_stp body
*/
Then select data from view
SELECT * INTO #x FROM my_view
यदि आप साइबेस पर काम कर रहे हैं तो ypou mysql के साथ सवाल क्यों टैग किया? –
एफवाईआई साइबेस एक * कंपनी * डेटाबेस उत्पाद नहीं है। क्या आप एएसई, एसक्यूएल कहीं भी, या साइबेस IQ के बारे में बात कर रहे हैं? –
मुझे तुम्हारा दर्द महसूस होता है। एएसई के तहत, ऐसा कोई आसान समाधान नहीं लगता है। आप या तो एस/पी संशोधित करते हैं, या इनलाइन को फिर से बनाते हैं। मैंने सोचा कि एक अस्थायी तालिका में एक एस/पी "इन" चलाने का कोई तरीका था (एस/पी को संशोधित किए बिना!), लेकिन मुझे यह नहीं मिल रहा है। *** Sybase के लोगों को एक PostgreSQL मैनुअल या कुछ के साथ पीटा जाना चाहिए, मुझे लगता है। ड्रैट, एक अन्यथा बेकार एस/पी मुझे नकल करने के लिए बंद। *** मैं वास्तव में जानना चाहूंगा कि यह कभी हल हो जाता है (एसक्यूएल कहीं भी बाहर)। – Roboprog