0

我正在将 java 应用程序转换为 .NET 应用程序,并且需要与 Package Function 接口。该函数以标准化的方式插入到多个表中,因此编写单独的查询来完成我的目标不是一种选择。

从这里和其他地方的阅读中,我了解到要访问 .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: no data found on this line of the function:

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

这对我来说没有任何意义。Sysdate 不是可以返回“未找到数据”的东西,除非我误解了它的工作原理。此外,这个函数在我们基于 Java 的生产服务器上也能正常工作。

我能够找到的关于访问函数和存储过程的所有内容都告诉我,我已经正确设置了这个,但显然情况并非如此。我已经验证了我所有的输入变量在运行时都有值,所以我现在很茫然。

4

1 回答 1

0

结果发现有一些数据丢失——只是不在 Oracle 指示的行上。有问题的字段有时不包含数据,但通常包含。该函数被编码以处理那里的缺失,但无论出于何种原因,该函数都因错误而退出,而不是执行 PLSQL 代码。然而,这是一个不同的问题。

于 2013-04-02T17:47:49.393 回答