zOs/SQL/EXSTRLEN

$#@
call sqlConnect
if 1 then $@[
s = 'abcd' || x'ff' || 'fghij'
do forever
   say 'rexx' length(s)
   say 'sql ' sql2one("select 'len=' ||length('"s"') || ' unicodeLen='",
            "|| length(cast('"s"' as varchar(32000) ccsid unicode))",
                 "from sysibm.sysDummy1")
   s = copies(s, 10)
   end
$] else $@[
   eMsg = left("so'/=.''''oder'so", 3000, 'a')
   if length(eMsg) > 2000 then
       eMsg = left(eMsg, 1997)'...'
   say 'len' length(eMsg) length(quote(eMsg, "'")) left(eMsg, 30)
   eMsg = "cast("quote(eMsg, "'")" as varchar(6000) ccsid unicode)"
   asUni = "as varchar(6000) ccsid unicode"
   id = -234
   install = '01.01.1956'
   tst     = '1956-04-01-00.00.00'
   call sqlUpdate 3, "update oa1p.tQZ043BindGen" ,
           "set result = '"res"', cmJob = '"jobPP"'" ,
           ", resTst = current timestamp" ,
           ", cmRes =" cmRes ,
           ", errMsg  = case when length(cast("quote(eMsg, "'") asUni ,
                         ")) < 2000 then" quote(eMsg,"'") ,
                       "else" quote(left(eMsg, 1500),"'") "end" ,
           "where genId =" id ,
             "and cmPkg = '"pkg"' and genTst = '"tst"'" ,
             "and appl = '"appl"'   and install = '"install"'" ,
             "and rz   = '"rz"'     and dbSys = '"dbSys"'"
   call sqlUpdate ,'rollback'
   say 'rollback'
$*(
           ", errMsg  = case when length(cast("quote(eMsg, "'") asUni ,
                         ")) < 2000 then" quote(eMsg,"'") ,
                       "else" quote(left(eMsg, 1500),"'") "end" ,
$*)
$]
   say 'after'
$#out                                              20151214 17:25:51
*** run error ***
SQLCODE = -102: STRING CONSTANT IS TOO LONG.  STRING BEGINS
    "abcdXfffgh"
src                    select 'len=' ||length('abcdXfffghijabcdXfffgh...
  >                      >>>pos 24 of 240118>>>
sql = select 'len=' ||length('abcdXfffghijabcdXfffghijabcdXfffghijabcdXfffghijab
stmt = prepare s49 into :M.SQL.49.D from :src
with into :M.SQL.49.D = M.SQL.49.D
$#out                                              20151214 13:35:08
*** run error ***
SQLCODE = -102: STRING CONSTANT IS TOO LONG.  STRING BEGINS
    "ab/=:fghij"
src                    select 'len=' ||length('ab/=:fghijab/=:fghijab...
  >                      >>>pos 24 of 200118>>>
sql = select 'len=' ||length('ab/=:fghijab/=:fghijab/=:fghijab/=:fghijab/=:fghij
stmt = prepare s49 into :M.SQL.49.D from :src
with into :M.SQL.49.D = M.SQL.49.D
$#out                                              20151214 13:32:52
*** run error ***
SQLCODE = -102: STRING CONSTANT IS TOO LONG.  STRING BEGINS
    "ab/=.fghij"
src                    select 'len=' ||length('ab/=.fghijab/=.fghijab...
  >                      >>>pos 24 of 200118>>>
sql = select 'len=' ||length('ab/=.fghijab/=.fghijab/=.fghijab/=.fghijab/=.fghij
stmt = prepare s49 into :M.SQL.49.D from :src
with into :M.SQL.49.D = M.SQL.49.D
$#out                                              20151214 13:32:30
*** run error ***
SQLCODE = -102: STRING CONSTANT IS TOO LONG.  STRING BEGINS
    "ab/=.fghij"
src                    select 'len=' ||length('ab/=.fghijab/=.fghijab...
  >                      >>>pos 24 of 200118>>>
sql = select 'len=' ||length('ab/=.fghijab/=.fghijab/=.fghijab/=.fghijab/=.fghij
stmt = prepare s49 into :M.SQL.49.D from :src
with into :M.SQL.49.D = M.SQL.49.D
$#out                                              20151214 13:25:02
*** run error ***
SQLCODE = -404: THE SQL STATEMENT SPECIFIES A STRING THAT IS
    TOO LONG
warnings  4=W no where
sql = update oa1p.tQZ043BindGen set result = 'RES', cmJob = 'JOBPP' , resTst = c
$#out                                              20151214 13:22:45
SQLCODE = 100, NOT FOUND:  ROW NOT FOUND FOR FETCH, UPDATE, OR
    DELETE, OR THE RESULT OF A QUERY IS AN EMPTY TABLE
sql = update oa1p.tQZ043BindGen set result = 'RES', cmJob = 'JOBPP' , resTst = c
$#out                                              20151214 13:22:05
SQLCODE = 100, NOT FOUND:  ROW NOT FOUND FOR FETCH, UPDATE, OR
    DELETE, OR THE RESULT OF A QUERY IS AN EMPTY TABLE
sql = update oa1p.tQZ043BindGen set result = 'RES', cmJob = 'JOBPP' , resTst = c
$#out