次のOracle関数があります。
function get_job_no return number is
V_job_no number;
begin
select appwork.tlm_corphier_job.nextval into V_job_no from dual;
return V_job_no;
end get_job_no;
注意してください:
1) これは関数であり、プロシージャではありません
2) これは VARCHAR ではなく NUMBER を返しています
3) 私はたまたま Oracle.DataAccess.Client ではなく System.Data.OracleClient を使用しています (別の問題のため、を持っていますが、どちらかで解決できれば問題ありません。
次のように、MS エンタープライズ ライブラリを使用して VB.Net からこれを呼び出そうとしています。
Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Data.OracleClient
Public Function GetNextJobNumber() As Object
Dim db As Database = DatabaseFactory.CreateDatabase()
Dim myresult As Object = Nothing
Using cmd As DbCommand = db.GetStoredProcCommand("CORPHIER_PKG.get_job_no")
Dim retval As New Data.OracleClient.OracleParameter("retval", GetType(System.Data.OracleClient.OracleNumber))
retval.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(retval)
db.ExecuteNonQuery(cmd)
myresult = retval.Value
End Using
Return myresult
End Function
次のエラーが表示されます。
System.InvalidCastException: パラメータ値を RuntimeType から Decimal に変換できませんでした。---> System.InvalidCastException: オブジェクトは IConvertible を実装する必要があります。System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Data.OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType) --- 内部例外スタック トレースの終わり --- System.Data で。 System.Data.OracleClient.OracleParameter.SetCoercedValueInternal(オブジェクト値、MetaType metaType) の OracleClient.OracleParameter.CoerceValue(オブジェクト値、MetaType destinationType) System.Data.OracleClient.OracleParameterBinding.PrepareForBind(OracleConnection 接続、Int32& オフセット) System.Data .OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior 動作, Boolean needRowid,