2017-11-22 102 views
5

kullanarak depolanmış bir Oracle prosedürünü yürütme ROracle üzerinden R'de bir Oracle prosedürünü yürütme/çağırma konusunda sorun yaşıyorum. Yordamı çağırmanın birçok farklı yolunu denedim ve aynı hataları almaya devam ediyorum. SELECT sorguları yaparken sorun yaşamadım ancak bir prosedür çağırmak zor oluyor. OracleProc ve dbSendQuery işlevlerini kullandım, ancak boşuna. Onların ikisi de işe yaramıyor. Roracle belgeleri arama prosedürlerinin örnekleri için acıklı.ROracle

Oracle prosedürünün MYSCHEMA'da MYPROC olarak adlandırıldığını varsayalım.

aşağıdaki eserlerini Oracle Developer: Prosedür YOK parametreler

doğrudan Oracle Developer prosedürü yürütmek, sorun yoktur (birkaç tablo okuma ve bir tabloya yazma içerir) ile çok basittir (ancak R)

EXEC MYSCHEMA.MYPROC; 

Sonra (ROracle yoluyla) R aynı prosedürü çağırmak için denemek ve bana hata veriyor. .oci.oracleProc (conn, açıklamada, data = verilerinde

Hata: En fazla bu hatadır

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

: Ben aynı hataları olsun prosedürü çağırmak için farklı yollar denedim önceden getirir = Önceden alma:

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

Bu (yukarıdaki biraz farklı) ı var hatadır:

.oci.oracleProc (10

Hata bağl, deyim, data = veri önceden getirir = Önalım,: ORA-00900: geçersiz SQL deyimi

# 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;") 

Bu aynı i almak hatası (olduğu .oci.SendQuery (bağlantı, açıklamada, veri = veri, önceden alma = prefetch içinde

Hata,:

birinci) olarak 10

Yordamımın herhangi bir parametresi yok. Bahsettiğim gibi, Oracle geliştiricisinde çağrıldığında gayet iyi çalışıyor. R'de gülünç bir şekilde basit bir sorgu çalışmasının nasıl yapılacağına dair fikirlerim tükendi. Sadece bu işi ROracle üzerinden almakla ilgileniyorum.

+1

ROracle bilmiyorum ama size söyleyebilirim EXECUTE bir SQL \ * Plus komutudur. Ne SQL'de ne de PL/SQL çağrılarında geçerlidir. "LOAD_query <- oracleProc (con1,") işlevini deneyin. MySCHEMA.MYPROC ") Benim tahminim sen yarı-kolon gerek yok ama belki sen yaparsın – APC

+0

Teşekkürler @APC, çok yardımcı oldu! Senin öneri" MYSCHEMA.MYPROC "işe yaramadı, ben koşmanın farklı versiyonlarını denedi EXEC'i seyrediyor ve çözümü buldum: "BEGIN MYSCHEMA, MYPROC; SONUÇ: “Woohoo. PS- ihtiyacınız olacaktır; işlem çağrısının sonunda, ki bu mesajın hiç olmaması gereken sendQuery'den farklıdır. Bu kadar tutarsızlık!” { PSS- EXEC veya EXECUTE her ikisi de PLSQL içinde – Ankhnesmerira

cevap

1

öncelikle (derleme) prosedürü oluşturmak mı? Örneğin: dbGetQuery (con, "CREATE PROCEDURE MYPROC ..."")

Sonra

böyle prosedürü yürütmek deneyin: (con oracleProc "(myProc BEGIN); END;")

Haklısınız bu ROracle konum :: oracleProc belgelerine iyi değil Bu örnek. bana yardımcı oldu: https://community.oracle.com/thread/4058424

+0

prosedürünü yürütmek için çalışırım. Kesinlikle dbGetQuery kullanmam gerekmedim.Prosedür zaten oluşturuldu ve belli bir şemada prosedürler oluşturma iznim yok zaten.Ancak sorguyu biçimlendirmek ve EXEC çalıştı: > LOAD_query <- oracleProc (con1, "BEGIN MYSCHEMA.MYPROC; END;") – Ankhnesmerira

-1

DBI paketini kullanmayı denediniz mi (ROracle ürünü yerine)?

driver <- dbDriver("Oracle") 
connection <- dbConnect(driver, ... = <connection_parameters>) 
result <- dbGetQuery(connection, "<QUERY>")