I have a PLpgSQL function that returns a string (varchar): if this string is over 256 characters long then the last three characters are corrupted: replaced by the string ' (.'
This is my test function:-
-- Function: testconverttousername(varchar, varchar)
DROP FUNCTION testconverttousername();
CREATE OR REPLACE FUNCTION testconverttousername()
RETURNS varchar AS
-- RETURNS text AS
'
DECLARE
userName varchar (1000); -- have tried without (1000) but makes no difference
locn int;
BEGIN
userName := \'12345678\';
userName := userName || userName; -- 16 chars
userName := userName || userName; -- 32 chars
userName := userName || userName; -- 64 chars
userName := userName || userName; -- 128 chars
userName := userName || userName; --256 chars
userName := userName || \'88\'; --258 chars
-- userName has now "788" at end replaced with " (." ? Test this...apparently not...
locn := position(\'.\' in userName);
IF locn > 0 THEN
--userName has now "788" at end replaced with " (." ? Test this...apparently not...
userName := \'Has got additional character . put in it \';
END IF;
RETURN userName; -- has "7888" at end replaced with " (." so fault is at the return statement??
END
'
LANGUAGE 'plpgsql' STABLE;
This function returns a string that should end with '7888' but ends with '78 (.'. As far as I can see returning text or varchar makes no difference, and the corruption occurs at the RETURN statement, not before. The fault only occurs if the string is over 256 characters.
I am using Postgres 8.0.0 latest release on a Windows 2000 server.
Your help would be appreciated, as this is causing some problems!
Cathy
:.________________
CONFIDENTIALITY : This e-mail and any attachments are confidential and may be privileged. If you are not a named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose or store or copy the information in any medium.
- [BUGS] Fault when return strings over 256 characters in PL... cathy . hemsley