create or replace PROCEDURE PROCEDURE_ONE(
T1_CURSOR OUT SYS_REFCURSOR,
Date_Start_P in Date Default sysdate
)
as
begin
OPEN T1_CURSOR FOR ...
这在使用Oracle SQL Developer进行测试时有效
我的VB.Net代码不喜欢该参数
Private Function Load_Aging_Stock() As DataTable
Try
Dim dba As New Data_Access_Class
Dim strSQL As String = "JOHN.PROCEDURE_ONE"
Dim dt As DataTable
Dim cmd As OracleCommand = dba.CreateStoredProcCommand(strSQL)
Dim oracleParameter(1) As OracleParameter
oracleParameter(0) = New OracleParameter()
oracleParameter(1) = New OracleParameter()
cmd.BindByName = True
With cmd
oracleParameter(0) = cmd.Parameters.Add("T1_Cursor", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output)
'.Parameters.Add("T1_CURSOR", OracleClient.OracleType.Cursor).Direction = ParameterDirection.Output
If Me.chk_No_Date_Start.Checked = False Then
Dim tmpDate As String = CDate(Me.dt_Start_Date.Text.Trim).ToString("yyyy-MM-dd")
oracleParameter(1) = cmd.Parameters.Add("Date_Start_P", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.Varchar2, val:=tmpDate, ParameterDirection.Input)
'.Parameters.Add("Date_Start_P", OracleClient.OracleType.DateTime).Value = Me.dt_Start_Date.Text
End If
End With
dt = dba.ExecuteSelectCmdDataTbl(cmd)
Return dt
Catch ex As Exception
Dim Err As New SS_Errors("frm__Report", "Load_Report", ex)
Return Nothing
End Try
End Function
我也尝试过相同的代码,但是用Date和两次替换Varchar2,两次都得到相同的异常
已识别的项目之一格式无效。
字符串作为参数值,只需使用日期值,即
oracleParameter(1) = cmd.Parameters.Add("Date_Start_P", dbType:=OracleDbType.Date, val:=CDate(Me.dt_Start_Date.Text.Trim), ParameterDirection.Input)