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 <
javiersanchezbarquero@xxxxxxxxx> 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 (<charles.wilt@xxxxxxxxx>)
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: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.


--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.