Reproducer VB.net Windows Forms app using .Net Framework 4.6.1 and Oracle OCI Drivers 19 (plus a DSN entry of course)
Imports System.Data.OracleClient
Private Sub btnFakeStoredProcedure(sender As Object, e As EventArgs) Handles btnStoredProcedure.Click
Dim OConn = New OracleConnection()
OConn.ConnectionString = "Password=...; User ID=...; Data Source=...;"
OConn.Open()
Dim Command = New OracleCommand("TESTPARAMS_PKG.test1param", OConn)
Command.CommandType = CommandType.StoredProcedure
OracleCommandBuilder.DeriveParameters(Command)
Dim txtParameters = "The parameters: " & vbCrLf & Command.Parameters.Count & vbCrLf
OConn.Close()
For Each parameter As OracleParameter In Command.Parameters
txtParameters += "Parameter Name: " & parameter.ParameterName & vbCrLf
txtParameters += "Parameter Direction: " & parameter.Direction & vbCrLf
txtParameters += "Parameter Value: " & parameter.Value.ToString() & vbCrLf & vbCrLf
Next
txtStoredProcedure.Text = txtParameters
End Sub
CREATE OR REPLACE PACKAGE TESTPARAMS_PKG AS
-- just 1 varchar param with and without default, implicit IN
PROCEDURE test1param (param1 VARCHAR2);
END TESTPARAMS_PKG;
/
CREATE OR REPLACE PACKAGE BODY TESTPARAMS_PKG AS
PROCEDURE test1param (param1 VARCHAR2) AS
BEGIN
-- TODO: Implementierung for PROCEDURE TESTPARAMS_PKG.test1param erforderlich
NULL;
END test1param;
END TESTPARAMS_PKG;
/
This worked (1 param returned) with 11g OCI drivers and an 11g backend (Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production), but fails (0 parameters returned) with 12c++/19c OCI drivers (and the same 11g backend)
Versions:
- "Oracle in instantclient_11.2.0_x86" -> parameter count returned
- "Oracle in OraClient12cR2_x86" -> parameter count == 0
interesting: OracleCommandBuilder.DeriveParameters(cmd) not getting parameters from Oracle 18c StoredProcedure in .net framework 4.7.2 reports somewhat similar