none of your code will work.
nextval might NEVER EVER return 1 to anyone. Sequences are not gap free.
and there is no reason why that syn_id_char_seq could not, would not apparently jump many values.
All it takes is ONE SESSION saying "rollback" and your entire scheme is destroyed.
ops$tkyte%ORA11GR1> create sequence s;
Sequence created.
ops$tkyte%ORA11GR1>
ops$tkyte%ORA11GR1> select chr( ascii('A')+trunc(s.nextval/1000000) ), s.nextval,
2 chr( ascii('A')+trunc(s.nextval/1000000) ) || to_char(mod(s.nextval,1000000),'fm000000')
3 from (select level l from dual connect by level <= 4 );
C NEXTVAL CHR(ASCI
- ---------- --------
A 1 A000001
A 2 A000002
A 3 A000003
A 4 A000004
ops$tkyte%ORA11GR1>
ops$tkyte%ORA11GR1> alter sequence s increment by 999993;
Sequence altered.
ops$tkyte%ORA11GR1> select s.nextval from dual;
NEXTVAL
----------
999997
ops$tkyte%ORA11GR1> alter sequence s increment by 1;
Sequence altered.
ops$tkyte%ORA11GR1>
ops$tkyte%ORA11GR1> select chr( ascii('A')+trunc(s.nextval/1000000) ), s.nextval,
2 chr( ascii('A')+trunc(s.nextval/1000000) ) || to_char(mod(s.nextval,1000000),'fm000000')
3 from (select level l from dual connect by level <= 4 );
C NEXTVAL CHR(ASCI
- ---------- --------
A 999998 A999998
A 999999 A999999
B 1000000 B000000
B 1000001 B000001
ops$tkyte%ORA11GR1>
ops$tkyte%ORA11GR1> alter sequence s increment by 999996;
Sequence altered.
ops$tkyte%ORA11GR1> select s.nextval from dual;
NEXTVAL
----------
1999997
ops$tkyte%ORA11GR1> alter sequence s increment by 1;
Sequence altered.
ops$tkyte%ORA11GR1>
ops$tkyte%ORA11GR1> select chr( ascii('A')+trunc(s.nextval/1000000) ), s.nextval,
2 chr( ascii('A')+trunc(s.nextval/1000000) ) || to_char(mod(s.nextval,1000000),'fm000000')
3 from (select level l from dual connect by level <= 4 );
C NEXTVAL CHR(ASCI
- ---------- --------
B 1999998 B999998
B 1999999 B999999
C 2000000 C000000
C 2000001 C000001
will work without "magic", you need a max to ensure you don't go past "Z", but other than that - don't try magic when math will work.