Re: Why you shouldn't be afraid to use VARCHAR in RPGLE...

Marco Facchinetti <marco.facchinetti-kthxv0ud/[email protected]>
Newsgroups gmane.comp.lang.as400.rpg
Message-ID <CAMsgu4p6wqUiy33_YLgEffS3ZLh_3AuV1ptsRS_MdEXZPYt=tg@mail.gmail.com>
Hi Javier, this usually happens when the varchar is in a Ds and is not
properly initialized.

HTH
--
Marco Facchinetti

Mr S.r.l.

Tel. 035 962885
Cel. 393 9620498

Skype: facchinettimarco


Il giorno ven 5 dic 2025 alle ore 01:55 Javier Sanchez <
[email protected]> ha scritto:

> Thanks Charles!  Good to consider it!
> I once had a strange issue with a varchar variable.  It was empty, and
> taking the %LEN() of it was throwing me an exception.  I was expecting me
> to return zero, but the exception was that the length was not valid.
>
> Did not have much time to find out why that was, so I had to quickly change
> it to a simple CHAR and use %LEN(%TRIM()) of it.  Issue solved.  Never knew
> and did not want to investigate further with that, but what I've been doing
> is that I first test the original var that will be the value of the
> assignment, and that one is a CHAR type.  Not a good practice at all, but
> yes, I started to be scared of that.
>
> Will listen to better practices with them.
>
> TIA
> JS
>
>
>
> El jue, 4 dic 2025 a las 18:43, Charles Wilt (<[email protected]>)
> escribió:
>
> > I think I've maybe mentioned this in replies over the years.  But as I
> > posted "Why you shouldn't be afraid to use VARCHAR in RPGLE" as a reply
> to
> > a post on the midrange list, I thought the subject would be worthwhile as
> > its own post here.
> >
> > Back in 2016, a performance assessment by IBM's performance consulting
> team
> > reported back to my company that a certain (home grown) XML parsing
> routine
> > "was taking 23% of all cpu used by interactive jobs."  The PEX report IBM
> > collected even showed that that CPU was mostly being used on only 13
> lines
> > of code in that routine.
> >
> > I happened to see the report, and took a look at the routine in question.
> > What I saw was a bunch of the following:
> >
> > select;
> >   when %trim($level(x)) = 'something';
> >     ....
> >   when $trim($level(x)) = 'something-else');
> >     ....
> > endsl;
> >
> >
> > Obviously, doing the same work over and over again is a waste.
> >
> > So I simply changed level and a couple other related variables from CHAR
> to
> > VARCHAR. Ironically, I didn't need to use %trim() at all, since level was
> > originally loaded via:
> >
> > $level(x) = %subst(chars:1:stringlen);
> >
> > The next year's performance report noted that CPU consumption by our XML
> > parsing routine had dropped to less than 1% of Interactive CPU usage. The
> > sample size was somewhat small, so IBM also looked at the routine
> > explicitly and noted that CPU usage per call to the routine dropped by a
> > factor of 15. Additionally, my testing showed that response time per call
> > dropped from an average of 0.39s to 0.13s!
> >
> > Not bad for a day's work....
> > Most of which was regression testing!
> >
> > Now at the time, we had 7 or 8 big P50-tier POWER8 servers...each with
> > approximately 10,000 users. So, as you can imagine, interactive CPU usage
> > was and still is hugely important to us.
> >
> > Morals of the story:
> > - don't be afraid of VARCHAR
> > - lots of %trim() is often a red flag
> >
> > HTH,
> > Charles
> >
> > PS. Strongly consider VARCHAR for new DB fields. Just make sure you
> > ALLOCATE them appropriately.
> > --
> > This is the RPG programming on IBM i (RPG400-L) mailing list
> > To post a message email: [email protected]
> > To subscribe, unsubscribe, or change list options,
> > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: [email protected]
> > Before posting, please take a moment to review the archives
> > at https://archive.midrange.com/rpg400-l.
> >
> > Please contact [email protected] for any subscription related
> > questions.
> >
> >
> --
> This is the RPG programming on IBM i (RPG400-L) mailing list
> To post a message email: [email protected]
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: [email protected]
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/rpg400-l.
>
> Please contact [email protected] for any subscription related
> questions.
>
>
-- 
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact [email protected] for any subscription related questions.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.