Use column type as the procedure parameter type
Posted: Wed 08 Aug 2012 19:21
Problem: Oracle procedure parameter is always passed as 0 for certain data types.
We have many Oracle procedures that use table column type as the procedure parameter type. For example:
CREATE OR REPLACE PROCEDURE EvalEmpl(
pSNbr IN EmplTable.SNbr%TYPE,
...)
while EmplTable.SNbr is defined as NUMBER(4)
In sqlExpr.pas:
TSQLConnection.GetProcedureParams():
DataSet.FieldByName(LengthFieldName).Value is always 0 for this NUMBER(4) data type
As a result, in SetProcedureParams():
iFldType= fldINT32 for this parameter, but fldINT32 is not handled. Given ArgDesc.iLen=0, the parameter pSNbr is always set to 0 when calling EvalEmpl.
The problem happened after we upgraded to dbexpoda.dll ver 4.90.0.25. It did not happen in dbexpoda.dll ver 2.50.0.25.
Delphi version: Delphi 2005 w/update 2
dbEXpress: dbexpoda.dll ver. 4.90.0.25
Anyone knows how to fix this? Thanks.
We have many Oracle procedures that use table column type as the procedure parameter type. For example:
CREATE OR REPLACE PROCEDURE EvalEmpl(
pSNbr IN EmplTable.SNbr%TYPE,
...)
while EmplTable.SNbr is defined as NUMBER(4)
In sqlExpr.pas:
TSQLConnection.GetProcedureParams():
DataSet.FieldByName(LengthFieldName).Value is always 0 for this NUMBER(4) data type
As a result, in SetProcedureParams():
iFldType= fldINT32 for this parameter, but fldINT32 is not handled. Given ArgDesc.iLen=0, the parameter pSNbr is always set to 0 when calling EvalEmpl.
The problem happened after we upgraded to dbexpoda.dll ver 4.90.0.25. It did not happen in dbexpoda.dll ver 2.50.0.25.
Delphi version: Delphi 2005 w/update 2
dbEXpress: dbexpoda.dll ver. 4.90.0.25
Anyone knows how to fix this? Thanks.