2014-02-23 28 views
4

我在Oracle 11g的一個包如下:如何使用實體框架在Oracle包內調用存儲過程?

CREATE OR REPLACE PACKAGE "HRS.PKG_TRAINING_SP" as 
TYPE T_CURSOR IS REF CURSOR; 

procedure GETPERSONNELTRAINIGLIST(
     personnel_Id_in in string, 
     base_date_in in string, 
     is_current_in in number, 
     lst OUT T_CURSOR); 
end; 

我如何可以執行上述步驟包(GETPERSONNELTRAINIGLIST)與實體框架(代碼優先)?

說明:我對Oracle使用Entity Framwork 6.0(代碼優先)和devart EF Provider

更新時間: 我使用下面的代碼:

var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16", ParameterDirection.Input); 
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input); 
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input); 

var ATests = 
    db.Database.SqlQuery<ATest>(
    "BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in); end;", 
    param1, param2, param3).ToList(); 

但低於錯誤提出:

{"ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GETPERSONNELTRAINIGLIST'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored"} 

回答

13

請重寫代碼以下列方式:也

var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16", ParameterDirection.Input); 
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input); 
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input); 
var param4 = new OracleParameter("result", OracleDbType.Cursor, ParameterDirection.Output); 

var ATests = 
db.Database.SqlQuery<ATest>(
"BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in, :result); end;", 
param1, param2, param3, param4).ToList(); 

,我們所接觸的您在我們的論壇http://forums.devart.com/viewtopic.php?t=29019

+0

它的功能就像一個魅力。 – Amir

+0

執行包中所有程序的最佳做法是什麼? – Amir

+0

使用Code-First方法時,使用上述方法(通過SqlQuery方法http://msdn.microsoft.com/en-us/library/gg679117%28v=vs.103%29.aspx),是最合適的。 有關使用存儲過程創建EF模型並使用它們的一般信息,請參閱此處 http://www.devart.com/dotconnect/oracle/docs/?OracleRoutines.html – Devart

0

不指定遊標變量。

lst OUT T_CURSOR 

這就是爲什麼你有錯誤。

您可以嘗試從這裏的解決方案possible answer

+0

我怎樣才能把'lst'參數爲'db.Database.SqlQuery'? – Amir

+0

不能[this](http://blog.devart.com/working-with-stored-procedures-and-ref-cursors.html#sp)有幫助嗎?它是關於'ref cursor'的,但我認爲沒有真正的問題來製作它? – smnbbrv

相關問題