Re: VB - API call to execute procedure, not using bind variables?

From: Charles Hooper <hooperc2000_at_yahoo.com>
Date: Tue, 28 Oct 2008 04:17:11 -0700 (PDT)
Message-ID: <de544810-6e33-4c73-81c2-cb6fb1007426@d45g2000hsc.googlegroups.com>


On Oct 27, 2:10 pm, Dave <David.C.Wat..._at_gmail.com> wrote:
> We are executing the below statement through a visual basic API and
> it's executing the SP with the literal values instead of bind
> variables, thus filling up our library cache with multiple unique
> statements and hard parsing over and over and over again...
>
> Does anyone know how we can change the code in VB to pass it to Oracle
> and use bind variables?
>
> Thanks
>
> SCHEMA.STORED_PROC('" & v_ID & "', '" & CStr(Format(v_RepBeginDate,
> "dd-MMM-yyyy")) & "', '" & CStr(Format(v_RepEndDate, "dd-MMM-yyyy")) &
> "', " & sched_def_inst & ");

Assuming that your VB program (note that the syntax is a bit different for VB.Net) is using ADO to connect to the database, the commands would look something like this:

    Dim comStoredProc as ADODB.Command
    Set comStoredProc = New ADODB.Command

    With comStoredProc

        'Set up the command properties
        .CommandText = "SCHEMA.STORED_PROC( ?, ?, ?, ?)"
        .CommandType = adCmdStoredProc
        .CommandTimeout = 30
        .ActiveConnection = conDatabase 'ADODB.Connection object
        'Add the bind variables
        .Parameters.Append .CreateParameter("v_id", adVarChar,
adParamInput, 30, v_ID)
        .Parameters.Append .CreateParameter("begin_date",
adDBTimeStamp, adParamInput, 8, cDate(v_RepBeginDate))
        .Parameters.Append .CreateParameter("end_date", adDBTimeStamp,
adParamInput, 8, cDate(v_RepEndDate))
        .Parameters.Append .CreateParameter("sched_def_inst",
adNumeric, adParamInput, 16, sched_def_inst)
        .Prepared = True

    End With
    comStoredProc.Execute

Later, when you need to re-execute the same stored procedure, you would use the following, rather than the full setup as above, assuming that comStoredProc is still in the variable scope:

    comStoredProc("v_id") = v_ID
    comStoredProc("begin_date") = cDate(v_RepBeginDate)
    comStoredProc("end_date") = cDate(v_RepEndDate)
    comStoredProc("sched_def_inst") = sched_def_inst
    comStoredProc.Execute

Charles Hooper
IT Manager/Oracle DBA
K&M Machine-Fabricating, Inc. Received on Tue Oct 28 2008 - 06:17:11 CDT

Original text of this message