2017-11-22 48 views
5

का उपयोग कर आर में संग्रहीत ऑरैक प्रक्रिया को निष्पादित करना मुझे ROracle के माध्यम से आर में ओरेकल प्रक्रिया को निष्पादित/कॉल करने में समस्या हो रही है। मैंने प्रक्रिया को कॉल करने के कई अलग-अलग तरीकों की कोशिश की है और मुझे वही त्रुटियां मिल रही हैं। मुझे SELECT क्वेरी करने में कोई समस्या नहीं है लेकिन प्रक्रिया को कॉल करना मुश्किल साबित हो रहा है। मैंने दोनों oracleProc और dbSendQuery फ़ंक्शंस का उपयोग किया है, लेकिन इसका कोई फायदा नहीं हुआ है। उनमें से कोई भी काम नहीं करता है। रोचक दस्तावेज कॉलिंग प्रक्रियाओं के उदाहरणों के लिए दयनीय है।ROracle

मान लें कि ओरेकल प्रक्रिया को माइस्चैमा में MYPROC कहा जाता है।

Oracle डेवलपर में निम्नलिखित काम करता है: प्रक्रिया नहीं मानकों

जब मैं प्रक्रिया Oracle डेवलपर सीधे निष्पादित, वहाँ कोई समस्या नहीं है (यह कुछ तालिकाओं को पढ़ने और एक मेज के लिए लिख शामिल है) के साथ बहुत आसान है (लेकिन आर में नहीं)

EXEC MYSCHEMA.MYPROC; 

तो मैं (ROracle के माध्यम से) आर से उसी प्रक्रिया कॉल करने के लिए कोशिश करते हैं और मुझे त्रुटि देता है। मैं प्रक्रिया को बुलाने की कई अलग अलग तरीकों की कोशिश की है मैं एक ही त्रुटियों मिलती है: .oci.oracleProc (कोन, बयान, डेटा = डेटा में

त्रुटि:

# This didn't work in R 
> require(ROracle) 
> LOAD_query <- oracleProc(con1, "BEGIN EXEC MYSCHEMA.MYPROC; END;") 

यह त्रुटि मैं मिलता है , प्रीफ़ेच = प्रीफ़ेच,:

# Then i tried the following and it still didn't work 
> LOAD_query <- oracleProc(con1, "EXEC MYSCHEMA.MYPROC;") 

यह (ऊपर एक से थोड़ा अलग) त्रुटि मुझे मिल गया है:

.oci.oracleProc (10

त्रुटि कोन, बयान, डेटा = डेटा, प्रीफ़ेच = प्रीफ़ेच,: ORA-00,900: अमान्य एसक्यूएल बयान

# so then i tried dbSendQuery which works perfectly fine with any SELECT statements but it didn't work 
> LOAD_query <- dbSendQuery(con1, "BEGIN EXEC MYSCHEMA.MYPROC; END;") 

यह त्रुटि मैं मिल (एक ही है .oci.SendQuery (कोन, बयान, डेटा = डेटा, प्रीफ़ेच = प्रीफ़ेच में

त्रुटि,:

पहले एक) के रूप में 10
# I even tried the following to exhaust all possibilities. And still no luck. I get the same error as above: 
> LOAD_query <- oracleProc(con1, "BEGIN EXEC MYSCHEMA.MYPROC(); END;") 

मेरी प्रक्रिया में कोई पैरामीटर नहीं है। जैसा कि मैंने बताया है कि ओरेकल डेवलपर में बुलाए जाने पर यह ठीक काम करता है। मैंने विचारों से बाहर निकला है कि आर में इस तरह के हास्यास्पद सरल प्रश्न कैसे प्राप्त करें! हालांकि मुझे रोराकल के माध्यम से इस काम को प्राप्त करने में दिलचस्पी है।

+1

मुझे रोराकल नहीं पता है लेकिन मैं आपको बता सकता हूं कि एक SQL \ * प्लस कमांड है। यह एसक्यूएल और न ही पीएल/एसक्यूएल कॉल में मान्य है। 'LOAD_query <- oracleProc (con1, " MYSCHEMA.MYPROC, ")'। मेरा अनुमान है आप सेमी-कोलन की जरूरत नहीं है, या तो लेकिन शायद आप ऐसा करेंगे। – APC

+0

धन्यवाद @APC, कि काफी मददगार था !! अपने सुझाव जबकि "MYSCHEMA.MYPROC" काम नहीं किया मैं चलने के विभिन्न संस्करणों की कोशिश की यह EXEC के बिना और मुझे समाधान मिला: "BEGIN MYSCHEMA, MYPROC; । अंत, "वाह PS- आप की आवश्यकता होगी, प्रक्रिया कॉल, जो sendQuery से अलग है, जो नहीं होना चाहिए के अंत में, अंत में इतना विसंगति>; -।! { PSS- EXEC या निष्पादित प्रक्रिया – Ankhnesmerira

उत्तर

1

आप पहली बार (संकलन) बनाया था प्रक्रिया? उदाहरण के लिए: dbGetQuery (con, "प्रक्रिया MYPROC बनाएं ...")

फिर इस तरह की प्रक्रिया निष्पादित करने के लिए प्रयास करें: oracleProc (चोर," MYPROC शुरू(); अंत; ")

आप सही है कि ROracle रहे :: oracleProc प्रलेखन अच्छा नहीं है यह उदाहरण। मेरी मदद की: https://community.oracle.com/thread/4058424

+0

को निष्पादित करने के लिए पीएलएसक्यूएल में दोनों काम मुझे निश्चित रूप से dbGetQuery का उपयोग करने की आवश्यकता नहीं थी। प्रक्रिया पहले से ही बनाई गई थी और मुझे किसी विशेष स्कीमा पर प्रक्रियाओं को बनाने की अनुमति नहीं है। लेकिन क्वेरी को स्वरूपित करने और हटाने के साथ आपका सुझाव EXEC काम किया: > LOAD_query <- oracleProc (con1, "BEGIN MYSCHEMA.MYPROC; अंत;") – Ankhnesmerira

-1

क्या आपने डीबीआई पैकेज (RORcle एक के बजाए) का उपयोग करने का प्रयास किया था?

driver <- dbDriver("Oracle") 
connection <- dbConnect(driver, ... = <connection_parameters>) 
result <- dbGetQuery(connection, "<QUERY>") 
संबंधित मुद्दे