4

私はこれを乗り越えてきました...ばかげているようですが、理解できませんでした!

テーブルをアンロードしたいのですが、区切り文字'|'を使用します フィールドの間に。テーブルのアンロードに使用される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;                                        
/*                                                
//*                                               

出力収量

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

なぜその..が区切り文字'|'の前にあるのか理解できません。その値が何を意味するのか推測できますか?ご関心をお寄せいただきありがとうございます。

4

4 に答える 4

9

SELECT次 のように変更してみてください。

SELECT  COLUMN1                                   
       ,CHAR('|'),COLUMN2   
       ,CHAR('|'),COLUMN3  
       ,CHAR('|'),COLUMN4  
       ,CHAR('|'),COLUMN5  
FROM   TABLEA  
WITH UR;  

入力に文字列定数'|'を配置すると、出力に可変長の文字列が作成されます。可変長文字ストリングの前には、ストリングの長さを示す2バイトの2進フィールドがあります。あなたの場合、それは01になります(HEXをオンにして出力を表示してみてください)。長さは2進整数値であるため、期待どおりに表示されません。

スカラー関数CHARは、可変長の文字列を固定長の文字列に変換します。これは、期待していたものです。

注: DSNTIAULはSPUFIとは異なります。これは、あなたがよく知っていると思います。DSNTIAULは選択されたデータを文字に変換しませんが、SPUFIは変換します。したがって、DSNTIAULを使用して数値データ(DECIMALなど)を含む列を選択した場合、その列はバイナリーで出力ファイルに書き込まれます。VARCHARデータは、先頭の2バイト長のフィールドで書き込まれます(例の「|」文字のように)。固定長文字(CHAR(5)など)として定義された列は、固定長文字ストリングとして書き込まれます(先行する2進長フィールドはありません)。

于 2011-06-03T13:51:59.367 に答える
1

SELECTトリム(COLUMN1)||
'|' ||トリム(COLUMN2)||
'|' ||トリム(COLUMN3)||
'|' ||トリム(COLUMN4)||
'|' || TRIM(COLUMN5)FROM TABLEA WITH UR;

selectステートメントでUはすべての列の出力をトリミングし、「|」を追加します 連結演算子を使用します。トリムを使用した結果、列と'|'の間にスペースはありません。詳細については、IBM ManualOnTrimを参照してください。

于 2017-09-18T09:25:19.590 に答える
0

CHAR関数を使用します。

SELECT  CHAR(COLUMN1                                   
   ,CHAR('|'),COLUMN2   
   ,CHAR('|'),COLUMN3  
   ,CHAR('|'),COLUMN4  
   ,CHAR('|'),COLUMN5)
FROM TABLEA  
WITH UR;
于 2017-08-18T14:38:43.003 に答える
-1
 `**SELECT COLUMN1  || CAST('|' AS CHAR(1))
  || COLUMN2  || CAST('|' AS CHAR(1))
  || COLUMN3  || CAST('|' AS CHAR(1))
  || COLUMN4  || CAST('|' AS CHAR(1))
  || COLUMN5 
FROM TABLEA  
WITH UR;**  
于 2016-04-25T09:33:58.820 に答える