Tôi có một thủ tục lưu trữ oracle mà mất 2 dây và một ngày trong parametter đầu vào và trong đó cung cấp cho một con trỏ ref như đầu ra:Gọi oracle Stored Procedure với EF thất bại
CREATE OR REPLACE PROCEDURE SCHEMA.MYPROSTO (
pPl IN VARCHAR2, -- Comma (;) separated
pTy IN VARCHAR2,-- Comma (;) separated
pDate IN mytable.mydate%TYPE,
pCursor OUT sys_refcursor)
IS
.....
sSQL VARCHAR2 (3000);
BEGIN
-- making SQL Order
sSQL := 'SELECT TO_CHAR (v.date_c........
......
OPEN pCursor FOR sSQL;
END MYPROSTO;
Con trỏ đầu ra trả về một tập của 3 chuỗi ô hàng.
tôi nhập khẩu thủ tục lưu trữ này trong mô hình khuôn khổ thực thể của tôi, với điều này trong file .config:
<oracle.manageddataaccess.client>
<version number="*">
<implicitRefCursor>
<storedProcedure schema="SCHEMA" name="MYPROSTO">
<refCursor name="PCURSOR">
<bindInfo mode="Output"/>
<metadata columnOrdinal="0" columnName="YEAR" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
<metadata columnOrdinal="1" columnName="MONTH" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
<metadata columnOrdinal="2" columnName="COUNT" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2"/>
</refCursor>
</storedProcedure>
</implicitRefCursor>
</version>
</oracle.manageddataaccess.client>
Các Wizzard chức năng nhập khẩu tạo ra một đối tượng kết quả và tạo ra một chức năng truy cập:
public virtual ObjectResult<MYPROSTO_Result> MYPROSTO (string pPL, string pTY, Nullable<System.DateTime> pDATE)
{
var pPLParameter = pPL!= null ?
new ObjectParameter("PPL", pPL) :
new ObjectParameter("PPL", typeof(string));
var pTYParameter = pTY!= null ?
new ObjectParameter("PTY", pTY) :
new ObjectParameter("PTY", typeof(string));
var pDATEParameter = pDATE.HasValue ?
new ObjectParameter("PDATE", pDATE) :
new ObjectParameter("PDATE", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<MYPROSTO_Result>("MYPROSTO", pPLParameter, pTYParameter, pDATEParameter);
}
Tuy nhiên, cuộc gọi đến chức năng này làm tăng ngoại lệ (System.Data.Entity.Core.EntityCommandExecutionException) trên dòng cuối cùng:
ORA-06550: Ligne 1, colonne 8 : PLS-00306: wrong number or types of arguments in call to 'MYPROSTO'
ORA-06550: Ligne 1, colonne 8 : PL/SQL: Statement ignored
Tôi không thấy lý do tại sao nó không
Được rồi pDate được ánh xạ tới VARCHAR2? – bubi
Ý bạn là gì? Bạn có đề nghị tôi cố gắng vượt qua một varchar thay vì một ngày trong thủ tục lưu trữ của tôi? –
Bạn đã thử xem http://docs.oracle.com/cd/E51173_01/win.122/e17732/featImplRefCursor.htm#ODPNT321 chưa? Ngoài ra, hãy thử thay đổi 'Varchar2' thành' varchar2' trong kiểu dữ liệu gốc (chỉ cần làm theo hướng dẫn ở đây, đó là Oracle, bạn không bao giờ biết). – flindeberg