我已经解决了这个......看起来很傻但无法弄清楚!
我想卸载一个表,但有一个分隔符 '|'在领域之间。这是用于卸载表的 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;
/*
//*
产出 yield
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
但我希望有像下面
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
我无法弄清楚为什么 .. 在分隔符 '|' 之前。猜猜这个值是什么意思?谢谢你的关注。
最佳答案
尝试更改您的 SELECT
如下:
SELECT COLUMN1
,CHAR('|'),COLUMN2
,CHAR('|'),COLUMN3
,CHAR('|'),COLUMN4
,CHAR('|'),COLUMN5
FROM TABLEA
WITH UR;
放置字符串常量
'|'
在您的输入中创建一个可变长度输出的字符串。变长字符串是
前面是一个 2 字节的二进制字段,给出了字符串的长度。
在您的情况下,这将是 01(尝试使用 HEX ON 查看输出)。
由于长度是一个二进制整数值
它没有按照您的预期显示。
标量函数
CHAR
转换一个变量长度字符串转换为固定长度的字符串,其中
是你所期待的。
注: DSNTIAUL 与 SPUFI 不同,我怀疑您更熟悉它。
DSNTIAUL 不会将选定数据转换为字符,而 SPUFI 会。所以,如果你使用
DSNTIAUL 选择包含数字数据的列(例如 DECIMAL),它将被写入
到您的二进制输出文件。 VARCHAR 数据将写入前导 2 个字节
长度字段(如您的示例中的“|”字符)。定义为固定的列
长度字符(例如 CHAR(5))将被写为固定长度的字符串(没有
前导二进制长度字段)。
关于select - 如何在卸载作业中为分隔符编写 DB2 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226802/