Re: upper() - NOT the usual FAQ :-)
Posted in 1997
The following procedure works on both 5.06.UC1 and 7.22.UC2 OnLine. Minor
variants of it fail on one or the other systems -- modify at your own risk.
I don't have 5.03 set up on Solaris, let alone on SCO, so I can't verify
that this will work on your machine.
Yours,
Jonathan Leffler (johnl@informix.com) #include <disclaimer.h>
>Date: Tue, 27 May 1997 09:38:51 +0100
>From: Richard Thomas <richardt@themusicstore.co.uk>
>X-Informix-List-Id: <list.14648>
>
>Hi folks, me again!
>
>The question I originally asked was why this procedure returned only the
>first character of the expected output, but the ensuing discussion got
>sidetracked onto why you can't have variable subscripts in SPL!!
>[...]
######################################################
CREATE PROCEDURE upper (str VARCHAR(255)) RETURNING VARCHAR(255);
DEFINE i INTEGER;
DEFINE l INTEGER;
DEFINE c CHAR(1);
DEFINE u CHAR(1);
DEFINE retstr VARCHAR(255);
IF str IS NULL THEN
RETURN NULL;
ELSE
LET l = LENGTH(str);
LET retstr = '';
FOR i = 1 TO l
LET c = str[1];
IF c BETWEEN "a" AND "z" THEN
IF c = 'a' THEN
LET u = 'A';
ELIF c = 'b' THEN
LET u = 'B';
ELIF c = 'c' THEN
LET u = 'C';
ELIF c = 'd' THEN
LET u = 'D';
ELIF c = 'e' THEN
LET u = 'E';
ELIF c = 'f' THEN
LET u = 'F';
ELIF c = 'g' THEN
LET u = 'G';
ELIF c = 'h' THEN
LET u = 'H';
ELIF c = 'i' THEN
LET u = 'I';
ELIF c = 'j' THEN
LET u = 'J';
ELIF c = 'k' THEN
LET u = 'K';
ELIF c = 'l' THEN
LET u = 'L';
ELIF c = 'm' THEN
LET u = 'M';
ELIF c = 'n' THEN
LET u = 'N';
ELIF c = 'o' THEN
LET u = 'O';
ELIF c = 'p' THEN
LET u = 'P';
ELIF c = 'q' THEN
LET u = 'Q';
ELIF c = 'r' THEN
LET u = 'R';
ELIF c = 's' THEN
LET u = 'S';
ELIF c = 't' THEN
LET u = 'T';
ELIF c = 'u' THEN
LET u = 'U';
ELIF c = 'v' THEN
LET u = 'V';
ELIF c = 'w' THEN
LET u = 'W';
ELIF c = 'x' THEN
LET u = 'X';
ELIF c = 'y' THEN
LET u = 'Y';
ELSE
LET u = 'Z';
END IF;
ELSE
LET u = c;
END IF;
# This was unnecessary on 7.22.UC2, but necessary on 5.06.UC1.
IF LENGTH(retstr) = 0 THEN
LET retstr = u;
ELSE
LET retstr = retstr || u;
END IF;
LET str = str[2,255];
END FOR;
RETURN retstr;
END IF;
END PROCEDURE;
#####################################################