2013-04-01 29 views
0

我正在將Java應用程序轉換爲.NET應用程序,並且需要使用包函數進行接口。該功能以標準化的方式插入到多個表中,因此編寫單獨的查詢來實現我的目標不是一種選擇。Oracle包函數調用在.NET中失敗

從這裏和其他地方閱讀,我明白要訪問.NET中的函數,您將它視爲存儲過程。我相信我已經正確地編寫了ADO代碼,但是我收到了我應該得到的異常。

我的代碼:

Dim conn As OracleConnection = Database.DataConnection //A property that opens the connection on Get 
Dim cmd As New OracleCommand() 
cmd.Connection = conn 
cmd.CommandText = "pkg_insert_stock.create_stock" 
cmd.CommandType = CommandType.StoredProcedure 

...//input values assigned here 

'Return parameters 
cmd.Parameters.Add("v_stock_id", OracleDbType.Varchar2, ParameterDirection.ReturnValue) 

'Input parameters 
cmd.Parameters.Add("p_cust_num", OracleDbType.Int32, custNum, ParameterDirection.Input) 
cmd.Parameters.Add("p_group_code", OracleDbType.Varchar2, groupCode, ParameterDirection.Input) 
cmd.Parameters.Add("p_searchkey1", OracleDbType.Varchar2, search1, ParameterDirection.Input) 
cmd.Parameters.Add("p_searchkey2", OracleDbType.Varchar2, search2, ParameterDirection.Input) 
cmd.Parameters.Add("p_searchkey3", OracleDbType.Varchar2, search3, ParameterDirection.Input) 
cmd.Parameters.Add("p_unit_qty", OracleDbType.Int32, unitQty, ParameterDirection.Input) 
cmd.Parameters.Add("p_price", OracleDbType.Int32, price, ParameterDirection.Input) 
cmd.Parameters.Add("p_width", OracleDbType.Decimal, width, ParameterDirection.Input) 
cmd.Parameters.Add("p_basis_weight", OracleDbType.Decimal, basisWeight, ParameterDirection.Input) 
cmd.Parameters.Add("p_costingkind", OracleDbType.Int32, costingKind, ParameterDirection.Input) 
cmd.Parameters.Add("p_quality", OracleDbType.Varchar2, quality, ParameterDirection.Input) 
cmd.Parameters.Add("p_sales_desc", OracleDbType.Varchar2, salesDesc, ParameterDirection.Input) 
cmd.Parameters.Add("p_purchase_desc", OracleDbType.Varchar2, purchaseDesc, ParameterDirection.Input) 

'Execute the stored procedure 
cmd.ExecuteNonQuery() 
articleNum = CType(cmd.Parameters.Item("v_stock_id").Value, Integer) 
conn.Close() 

函數簽名:

PACKAGE pkg_insert_stock AS 
function create_stock(p_cust_num in NUMBER, p_group_code in VARCHAR2, p_searchkey1 in VARCHAR2, p_searchkey2 in VARCHAR2, p_searchkey3 in VARCHAR2, p_unit_qty in NUMBER, p_price in NUMBER, p_width in NUMBER, p_basis_weight in NUMBER, p_costingkind in NUMBER, p_quality in VARCHAR2,p_sales_desc in VARCHAR2, p_purchase_desc in VARCHAR2) return VARCHAR2; 
END pkg_insert_stock; 

我的問題(目前)是我收到ORA-01403:沒有這條線的功能找到的數據:

select round(((sysdate - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)),0) into v_timestamp from dual; 

這對我沒有任何意義。系統日期不是可以回來的「沒有數據發現」,除非我誤解了如何工作。而且,這個函數在我們的基於Java的生產服務器上工作得很好,就像。

我已經能夠找到有關訪問函數和存儲過程的所有信息都告訴我我已經正確設置了這個設置,但顯然情況並非如此。我已驗證所有輸入變量在運行時都有值,所以我現在處於虧損狀態。

回答

0

原來有一些缺失的數據 - 只是不在Oracle指定的行上。有問題的領域有時不包含數據,但通常是這樣。該函數被編碼以處理在那裏丟失,但是無論出於何種原因該函數正在退出而出現錯誤,而不是執行PLSQL代碼。然而,這是一個不同的問題。