zOs/SQL/EXCEPSE0
--select hex(' -@_#*%''') " -@_#*%'",
-- hex(' ') sp,hex('*') "*", hex('a') "a", hex('A') A, hex('0') "0"
-- from sysibm.sysDummyU;
with l1 as
( select pri,
db, case when posstr(db, '*') > 0
then posstr(db, '*') - 1 else 8 end dbLen,
ts, case when posstr(ts, '*') > 0
then posstr(ts, '*') - 1 else 8 end tsLen,
ix, case when posstr(ix, '*') > 0
then posstr(ix, '*') - 1 else 16 end ixLen,
fun, case when posstr(fun, '*') > 0
then posstr(fun, '*') else 8 end funLen,
code, wert, info,
char(right('000' || strip(char(pri)), 4) || ' '
|| translate(db || ts || ix || fun, x'01', '*') , 44) cat
from gdb9998.except
),
l2 as
( select (((pri*100+dbLen) *10+tsLen) *100+ixLen) *10+funLen priLen,
char(substr('abcdefghijklmnopqrstuvwxyz'
|| 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1 + pri, 1)
||substr('abcdefghijklmnopqrstuvwxyz', 1 + dbLen, 1)
||substr('abcdefghijklmnopqrstuvwxyz', 1 + tsLen, 1)
||substr('abcdefghijklmnopqrstuvwxyz', 1 + ixLen, 1)
||substr('abcdefghijklmnopqrstuvwxyz', 1 + funLen, 1), 5) priTot,
l1.*
from l1
),
l3 as
( select char(priTot || db || ts || ix || fun, 50) cat, l2.*
from l2
),
l4 as
( select char(
right('000' || strip(char(pri)), 4) || ' '
|| translate(db || ts || ix || fun, x'00', '*') , 50) cat,
l1.*
from l1
)
select e.*, s.*
from sysibm.systablespace s, l1 e
where s.dbName = 'DGDB9998' and
e.cat = (select max(cat) from l1 f where
left(f.db, f.dbLen) = left(s.dbName, f.dbLen)
and left(f.ts, f.tsLen) = left(s.Name, f.tsLen)
and f.ix = ''
and f.fun like 'GB%'
)
order by cat