[Mono-bugs] [Bug 424915] New: Oracle - stored procedure returning string padded
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Tue Sep 9 15:16:29 EDT 2008
https://bugzilla.novell.com/show_bug.cgi?id=424915
Summary: Oracle - stored procedure returning string padded
Product: Mono: Class Libraries
Version: 2.0
Platform: x86-64
OS/Version: SLES 10
Status: NEW
Severity: Blocker
Priority: P5 - None
Component: Sys.Data
AssignedTo: bnc-blr-team-mono at forge.provo.novell.com
ReportedBy: webservices at landmarkdigital.com
QAContact: mono-bugs at lists.ximian.com
Found By: Development
When a stored procedure returns a value through an OUT string parameter, and
the size is set after the out parameter is constructed - the string returned
is padded to the specified size. (and shouldn't be)
-----------------------------------------------------------
With the following pl/sql stored procedure:
-----------------------------------------------------------
----------------------------------------------------------------------
-- GetProviderDesc
-- Returns the textual description for the provider with the given ID
----------------------------------------------------------------------
PROCEDURE GetProviderDesc
(
providerID IN PROVIDER.PROVIDER_ID%type,
providerDesc OUT PROVIDER.PROVIDER_DESC%type -- which is NVarChar
)
AS
BEGIN
SELECT PROVIDER.PROVIDER_DESC INTO providerDesc
FROM PROVIDER
WHERE PROVIDER.PROVIDER_ID = providerID;
END; -- PROCEDURE ListAuditSamples
-----------------------------------------------------------
using the following code:
-----------------------------------------------------------
System.Data.OracleClient.OracleParameter providerDesc = new
System.Data.OracleClient.OracleParameter();
providerDesc.ParameterName = "providerDesc";
providerDesc.OracleType =
System.Data.OracleClient.OracleType.NVarChar;
providerDesc.Direction = System.Data.ParameterDirection.Output;
providerDesc.Value = string.Empty;
// if size is not set, and even if size is set in parameter
consstructor,exception 'Size must be set.' is thrown
// at System.Data.OracleClient.OracleParameter.AssertSizeIsSet ()
[0x00000]
// at System.Data.OracleClient.OracleParameter.Bind
(System.Data.OracleClient.Oci.OciStatementHandle statement,
System.Data.OracleClient.OracleConnection con, UInt32 pos) [0x00000]
// at (wrapper remoting-invoke-with-check)
System.Data.OracleClient.OracleParameter:Bind
(System.Data.OracleClient.Oci.OciStatementHandle,System.Data.OracleClient.OracleConnection,uint)
// at System.Data.OracleClient.OracleCommand.BindParameters
(System.Data.OracleClient.Oci.OciStatementHandle statement) [0x00000]
// at System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal
(System.Data.OracleClient.Oci.OciStatementHandle statement, Boolean
useAutoCommit) [0x00000]
// at System.Data.OracleClient.OracleCommand.ExecuteNonQuery ()
[0x00000]
// i.e., Size must be set independently from OracleParameter constructor
providerDesc.Size = 256;
ExecuteStoredProcedure ( PKG_NAME + ".GetProviderDesc", //string
procName,
new
System.Data.OracleClient.OracleParameter[] {
CreateNumberParam("providerID", providerID),
providerDesc
} );
System.Console.WriteLine("providerDesc = '" + providerDesc.Value + "'");
-----------------------------------------------------------
yields the following output:
-----------------------------------------------------------
providerDesc = 'Groove Addicts
'
-----------------------------------------------------------
If the above reads strangely, essentially, the oracle driver
has inserted whitespace for up to the number of characters
specified in the OracleParameter's Size member. Preferably
the string returned should not be padded at all.
-----------------------------------------------------------
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list