简体   繁体   中英

DB2 SQL Interpret a field as other CCSID

So I have a file on my AS400 as a result of DSPJRN and I want to look at some data in the JOESD field which is the after image from the journal of a file. This is defined as char with CCSID = 65535 . I guess this is because it is the whole record with a mixture of ccsid and numeric fields.

I can use substr() to get the actual field from the original file.

In the original file the column is defined graphic(10) ccsid 13488 . Thats UCS-2 .
If I do hex(substr(joesd,522,20)) I get a result of 004100530044... and so on so I know it's the correct data but I can't get it to display as 'ASD...'

I tried graphic(substr(joesd,522,20),10,13488) but it gives an error that the conversion from ccsid 65535 to 13488 isn't valid . I don't want to convert it but interpret it as the other ccsid

GRAPHIC() doesn't take CCSID as a parm. The third parm is length according to my 7.1 reference.

What version are you using?

I thought CAST() might be a solution, but it doesn't appear to work.

As I see it, one option would be to build a user defined function (UDF) that does the conversion you need; possibly with the iconv() API.

The other option, would be to dump the data into a properly formatted file. I use the DBUJRN utility from DBU. There's other similar options. Including an open source one (sorry that the description is in German, but google translate does a good enough job to figure out the source to download).

The utilities basically work the same way; you can in fact run through the same process manually. Try the following:

Step 1 (the DSPJRN you've been doing)

DSPJRN <...> OUTFILE(MYLIB/MYJRNOUT) 

Step 2 - Create a new file with the journal header fields followed by all the fields from your journaled file (MYFILE)

CREATE TABLE mylib/mytbl as 
  ( select JOENTL, JOSEQN, JOCODE, JOENTT, JODATE,     
           JOTIME, JOJOB, JOUSER, JONBR, JOPGM, JOOBJ, 
            JOLIB, JOMBR, JOCTRR, JOFLAG, JOCCID,       
           JOINCDAT, JOMINESD, JORES,
           m.*
     from MYLIB/MYJRNOUT , MYLIB/MYFILE m
   ) with no data

Step 3 - Copy the data without regard to the format differences..

CPYF FROMFILE(MYLIB/MYJRNOUT) TOFILE(MYLIB/MYTBL) MBROPT(*ADD) FMTOPT(*NOCHK)

You should end up with data originally in JOESD split into it's appropriate fields.

Note of course that this technique only works for one file at a time. Also, make sure you're only dumping *RCD entries and you'll probably want to skip the DELETE entries.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM