Java アプリケーションを .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;
これは私には意味がありません。Sysdate は、その仕組みを誤解しない限り、「データが見つかりません」と返されるものではありません。また、この関数は、Java ベースの本番サーバーでそのまま問題なく動作します。
関数とストアド プロシージャへのアクセスに関して私が見つけたすべてのことから、これが正しくセットアップされていることがわかりますが、明らかにそうではありません。すべての入力変数が実行時に値を持つことを確認したので、今途方に暮れています。