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

标签 select db2 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;                                        
/*                                                
//*                                               

产出 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/

相关文章:

c++ - 使用 _Ropen 打开物理文件时出错

shell - awk 与 printf 换行

mainframe - 有没有办法将数组传递给外部 REXX 程序?

python - 如何根据多列中的单个值从多索引中进行选择?

select - 对特定表列的 Odata 查询

javascript - 使用 jQuery 遍历 HTML 选择中的选项

mysql - 如何同时使用 INSERT、SELECT 和 SET?

java - 如何从 Java 程序中检索 db2 命令输出

java - 使用 Java 创建 GDG 基础

php - 将 Ubuntu 14.04 上的 ibm_db2 函数 (php) 连接到 DB2 for z/OS