Skip to Content.
Sympa Menu

freetds - Re: [freetds] Stored procedure output parameter binding

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "James K. Lowden" <jklowden AT freetds.org>
  • To: freetds AT lists.ibiblio.org
  • Subject: Re: [freetds] Stored procedure output parameter binding
  • Date: Thu, 15 Sep 2011 23:41:41 -0400

On Thu, 15 Sep 2011 16:48:26 -0700
"Michael Gurfinkel [TSS]" <michael AT tsswireless.com> wrote:

> After reading documentation of dbrpcparam I thought that if 3rd
> parameter passed to it (BYTE status) is set to DBRPCRETURN then the
> local variable bound to it will get the actual value placed into it
> by stored proc,

I can see why you thought that, but that's not the design.

> but that is not working for me. In my example I have
> to run dbretdata to actually retrieve the value. Then what is the use
> of passing DBRPCRETURN ?

The use of passing DBRPCRETURN is to tell the server to send parameter
output data. If you don't set that flag, the value is not returned to
the client, ever.

The exact why of all this would have to be answered by the designers,
but we can hazard a guess. dbrpcparam() is an input function.
Converting it to an output function by means of DBRPCRETURN would
invite bugs because it's subtle. The input parameter
variable might well go out of scope before the results are all
processed, which is when the server returns the data. If it's not out
of scope, the value has changed, which would be a surprising effect for
an input function!

There would also be no way to know if in fact the server actually did
return the data. (Just because you pass DBRPCRETURN doesn't mean the
parameter was declared OUTPUT in the stored procedure.) dbnumrets()
and friends give you that information.

HTH.

--jkl




Archive powered by MHonArc 2.6.24.

Top of Page