2015-06-12 5 views
5

इम से एक दैवज्ञ संग्रहीत प्रक्रिया को क्रियान्वित करने एसक्यूएल सर्वर 2008 R8 गर्त डीबी लिंक से एक दैवज्ञ संग्रहीत प्रक्रिया निष्पादित करने के लिए कोशिश कर रहा है, संग्रहीत प्रक्रिया के हेडर कुछ इस तरह है:Sql सर्वर 2008

प्रक्रिया परीक्षा (एक्स बाहर NOCOPY VARCHAR2, वाई बाहर NOCOPY संख्या, संख्या में जेड)

यह प्रक्रिया एक परिणाम के

मेरे T-SQL एक मेज "mytable" अद्यतन करें और लौट जाना जाएगा:

  DECLARE @X nvarchar(255)    
      DECLARE @Y INTEGER 
      DECLARE @Z INTEGER 


      SET @X= '' 
      SET @Y = 0 
      SET @Z = 2 

      EXEC('begin USER.PKG.TEST(?,?,?); end;',@X OUTPUT, @Y OUTPUT,@Z) AT DB_ORACLE; 

संग्रहीत प्रक्रिया निष्पादित किया जाता है क्योंकि मैं देख सकता हूँ कि तालिका "mytable" अद्यतन किया जाता है, लेकिन समस्या

Msg 7215, Niveau 17, État 1, Ligne 10 
Impossible d'exécuter l'instruction sur le serveur distant 'DB_ORACLE'. 

कि में

Cannot execute the instruction at the distant server 'DB_ORACLE' 

एनबी का अनुवाद: कि im एक त्रुटि हो रही है: Rpc, RPC आउट, और रिमोट मिलान उपयोग के लिए मानकों सक्षम होते हैं

मदद

+0

संभवतः है कुछ लोग आधुनिक तरीके से बैंग करते हैं, इसलिए मुझे इस लोगों से पूछने के लिए माफ़ कर दो, लेकिन क्या इसे रीमबल @ डीब्लिंक वैल्यूज ('संग्रहित प्रो कॉल') में एक इंसर्ट का उपयोग करके किया जा सकता है, फिर रिमोट टेबल पर rigger संग्रहीत प्रो कॉल निष्पादित करता है, परिणाम किसी अन्य तालिका/अद्यतन अद्यतन में वापस, काम करते हैं? मुझे यकीन है कि मैंने कहीं पहले देखा है। – TenG

+0

उत्तर के लिए धन्यवाद, लेकिन समस्या मैं संग्रहीत प्रक्रिया को संपादित नहीं कर सकता या उस तालिका में एक ट्रिगर जोड़ सकता हूं, क्योंकि मेरे पास ऑरैकल डेटाबेस/टेबल पर नियंत्रण नहीं है। आपको इसे एक webservice उपभोग करने की तरह देखना होगा ताकि यदि आप ग्राहक हैं तो आप webservice को संपादित नहीं कर सकते हैं। – aminedev

उत्तर

0

के लिए धन्यवाद एसक्यूएल सर्वर से एक सरल ओरेकल प्रक्रिया कॉल

कार्यकारी के लिए ('sproc_name शुरू; अंत; चर के साथ प्रक्रिया ') linked_server_name

पर बुला

<B>declare @z int<B> 
<B>set @z = 10 <B> 
exec ('begin sproc_name(''' + @z + '''); end;') at 
linked_server_name; 

यह मेरे लिए ठीक काम करता है उपयोग

+0

उत्तर के लिए धन्यवाद, लेकिन समाधान मेरे लिए काम नहीं किया है, मेरे पास एक अतिरिक्त त्रुटि संदेश है: पीएलएस -00363: अभिव्यक्ति '' ne peut être utilisée comme cible d'effectation ओआरए -06550: लिग्ने 1, कोलोने 53: पीएलएस -00363: अभिव्यक्ति '0' ne peut être utilisée comme cible d'impressation ओआरए -06550: लिग्ने 1, कोलोन 7: पीएल/एसक्यूएल: कथन ने अनदेखा किया। संदेश 7215, निवेउ 17, एटैट 1 , लिग्ने 11 इंपॉसिबल डी एक्सेक्यूटर एल 'निर्देश सुर ले सर्विसूर डिस्टेंट' डीबी_ओआरएसीएलई ' – aminedev

+0

क्या आप इसका अनुवाद कर सकते हैं? –

+0

ओएलई डीबी प्रदाता "ओरोलेडबी।ओरेकल "" डीबी_ओआरएसीएलई "लिंक सर्वर ने" ओआरए -06550: लाइन 1, कॉलम 50: पीएलएस -00363: अभिव्यक्ति "" असाइनमेंट लक्ष्य ओआरए-06550: लाइन 1, कॉलम 53: के रूप में उपयोग नहीं किया जा सकता है पीएलएस -00363: अभिव्यक्ति '0' को असाइनमेंट लक्ष्य ओआरए -06550: लाइन 1, कॉलम 7: पीएल/एसक्यूएल के रूप में उपयोग नहीं किया जा सकता है: कथन ने अनदेखा किया "। संदेश 7215, स्तर 17, राज्य 1, रेखा 10 दूरस्थ सर्वर 'DB_ORACLE' पर निर्देश निष्पादित नहीं कर सकता। मुझे लगता है कि समस्या OUTPUT पैरामीटर है – aminedev

0

परिणाम सेट के माध्यम से उत्पादन चर पासिंग काम करना चाहिए:

DECLARE @X nvarchar(255) = ''; 
DECLARE @Y int = 0; 
DECLARE @Z int = 2; 

DECLARE @Result As Table (X nvarchar(255), Y int); 

INSERT INTO @Result (X, Y) 
    EXEC('declare X nvarchar(255) = ?; Y int = ?; Z int = ?; begin USER.PKG.TEST(X, Y, Z); select X, Y from DUAL; end;', @X, @Y, @Z) AT DB_ORACLE; 

SELECT @X = X, @Y = Y FROM @Result;