IBM i (旧AS400）の自己学習メモ０８　QTEMPにサクッと開発テスト用の一時ファイル作成（DDSを使わない１カラムテーブル）

# 自己学習メモインデックス

[IBM i (旧AS400）の自己学習メモ　インデックス](https://qiita.com/You_name_is_YU/items/3964849e7803c8eaf767)

# 概要

CLプログラミングの勉強を進めていくと、最初はHello Worldを出力するところから始まり、IF文やFOR文の構文（コマンド？）と、大体どのプログラミング言語でも同様の進捗となります。
一段難易度が高くなるのがDBアクセス部分の処理ですが、どうやらAS400での開発におけるDBアクセス部分は非常に簡単に開発できそうです。

ここでは、DBに1カラムしかないテーブルを作成してサンプルデータを投入する方法を、QTEMPライブラリに対して行います。
※QTEMPライブラリに作ったファイルなどは、ログインし直すと削除されてしまいます。
　開発テスト用に一時的に何らかのファイルを作成したい場合などに利用するといいのではないかと思います。

# QTEMPにファイルを作成

以下コマンドを入力してF4キーを押下

```shell-session
crtpf qtemp/sample
```

Record lengthの項目に適当なサイズを指定してEnterを押下。
この項目は、DDSを用いずに、１カラムのみ定義されたファイルを指定したレコード長（バイト）でサクッと作るために指定する項目です。

ちなみにDDSとは
Data Description Specifications ： データ記述仕様のことで、Oracleなんかでいうところの、Create Table文をソースコードとして保管しているファイル。というイメージをしています。

```shell-session
                         Create Physical File (CRTPF)      
                                                           
Type choices, press Enter.                                 
                                                           
File . . . . . . . . . . . . . . FILE         > SAMPLE     
  Library  . . . . . . . . . . .              >   QTEMP    
Source file  . . . . . . . . . . SRCFILE        QDDSSRC    
  Library  . . . . . . . . . . .                  *LIBL    
Source member  . . . . . . . . . SRCMBR         *FILE      
Record length, if no DDS . . . . RCDLEN         100        
Generation severity level  . . . GENLVL         20         
Flagging severity level  . . . . FLAG           0          
File type  . . . . . . . . . . . FILETYPE       *DATA      
Member, if desired . . . . . . . MBR            *FILE      
Text 'description' . . . . . . . TEXT           *SRCMBRTXT                                
```

上記の実行が完了すると以下のメッセージが画面上に表示されます。

```shell-session
File SAMPLE created in library QTEMP.
```

# 作成したファイルにデータを投入する

SAMPLEという名前のファイルをQTEMPライブラリ内に作成しましたが、特にデータの中身は空の状態です。
ここにデータを投入していきます。

以下のコマンドを入力してEnter

```shell-session
upddta qtemp/sample
```

以下のような画面が表示されます。
この画面のSAMPLE:の部分に、登録したい文字列データを入力してEnterを押下していくことで、どんどんデータがINSERTされていきます。

```shell-session
WORK WITH DATA IN A FILE                       Mode . . . . :   ENTRY  
Format . . . . :   SAMPLE                      File . . . . :   SAMPLE 
                                                                       
                                                                       
SAMPLE:__________________________________________________________________
```

登録が完了したらF3キーを押下して、End data entryにYを指定してEnterを押下する。

```shell-session
                               End Data Entry                
                                                             
  Number of records processed                                
                                                             
    Added  . . . . . :           3                           
    Changed  . . . . :           0                           
    Deleted  . . . . :           0                           
                                                             
                                                             
                                                             
                                                             
Type choice, press Enter.                                    
                                                             
  End data entry  . . . . . . .    Y           Y=Yes,  N=No  
```

これでQTEMPに作成したテーブルに対し、データの登録まで完了しました。

【補足】
ちなみに、`upddta`コマンドでデータを登録した機能は、strdfuでQTEMP/SAMPLEを指定し、F9キーを押下してINSERTモードにした場合と同じ機能です。

# 登録されたデータを確認してみる

以下のコマンドを実行する

```shell-session
runqry () qtemp/sample
```

取得結果はこんな感じ

```shell-session
Line   ....+....1....+....2....+....3....+
       SAMPLE                             
000001 sample data 1                      
000002 sample data 2                      
000003 sample data 3                      
****** ********  End of report  ********  
```

【補足】
select * from qtemp/sampleをするような場合、こういったコマンドで簡単に全件取得できます。
strsqlコマンドを使って、上記SQLを実行してもいいし、wrkqryコマンドを使ってqtemp/sampleのデータを参照しても、登録データの確認は可能です。