如何在分隔符的卸载作业中编写DB2 SELECT语句

Raj*_*ddy 4 db2 select mainframe jcl

我一直在这...看起来很傻,但无法弄清楚!

我想卸载一张桌子但是带有分隔符'|' 在田野之间.这是用于卸载表的JCL:

//JS020    EXEC PGM=IKJEFT01,                     
//             DYNAMNBR=20                        
//*                                               
//SYSTSPRT DD  SYSOUT=*                           
//SYSPRINT DD  SYSOUT=*                           
//SYSUDUMP DD  SYSOUT=*                           
//SYSPUNCH DD  SYSOUT=*                           
//*                                               
//SYSTSIN  DD  *                                  
  DSN SYSTEM(XXXX)                                
  RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARM('SQL')
//*                                               
//SYSREC00 DD  DSN=TABLEA.UNLOAD.FILE,            
//             DISP=(NEW,CATLG,DELETE),           
//             UNIT=SYSDA,LRECL=80                
//SYSIN    DD  *                                  
  SELECT  COLUMN1                                 
         ,'|',COLUMN2                                 
         ,'|',COLUMN3                                 
         ,'|',COLUMN4                                 
         ,'|',COLUMN5                                 
  FROM   TABLEA                                   
  WITH UR;                                        
/*                                                
//*                                               
Run Code Online (Sandbox Code Playgroud)

产量

VALUEA..|VALUEB..|VALUEC..|VALUED..|VALUEE
VALUEA..|VALUEB..|VALUEC..|VALUED..|VALUEE
VALUEA..|VALUEB..|VALUEC..|VALUED..|VALUEE
VALUEA..|VALUEB..|VALUEC..|VALUED..|VALUEE
VALUEA..|VALUEB..|VALUEC..|VALUED..|VALUEE
Run Code Online (Sandbox Code Playgroud)

但是我想在下面说

VALUEA|VALUEB|VALUEC|VALUED|VALUEE
VALUEA|VALUEB|VALUEC|VALUED|VALUEE
VALUEA|VALUEB|VALUEC|VALUED|VALUEE
VALUEA|VALUEB|VALUEC|VALUED|VALUEE
VALUEA|VALUEB|VALUEC|VALUED|VALUEE
Run Code Online (Sandbox Code Playgroud)

我无法弄明白为什么......在分隔符'|'之前.任何猜测这个值意味着什么?谢谢你的关注.

Nea*_*alB 8

尝试更改您的SELECT内容如下:

SELECT  COLUMN1                                   
       ,CHAR('|'),COLUMN2   
       ,CHAR('|'),COLUMN3  
       ,CHAR('|'),COLUMN4  
       ,CHAR('|'),COLUMN5  
FROM   TABLEA  
WITH UR;  
Run Code Online (Sandbox Code Playgroud)

将字符串常量'|'放在输入中会在输出中创建可变长度字符串.可变长度字符串前面是一个2字节的二进制字段,给出字符串的长度.在你的情况下,这将是01(尝试用HEX ON查看输出).由于长度是二进制整数值,因此它不会像您期望的那样显示.

标量函数CHAR将可变长度字符串转换为固定长度的字符串,这正是您所期望的.

注意: DSNTIAUL与SPUFI不同,我怀疑你更熟悉它.DSNTIAUL并没有选择的数据转换为字符,SPUFI一样.因此,如果您使用DSNTIAUL选择包含数字数据的列(例如DECIMAL),它将以二进制形式写入您的输出文件.VARCHAR数据将使用前导2字节长度字段写入(在示例中为'|'字符).定义为固定长度字符的列(例如CHAR(5))将写为固定长度字符串(无前导二进制长度字段).