適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

【Db2 AS400】SYSIBM.SYSDUMMY1とは?

Db2について調べているとよく出てくる、

SYSIBM.SYSDUMMY1というテーブル。

なんの前触れもなく、さも当たり前のように出てきますが、

これは何者なのでしょう。

SYSIBM.SYSDUMMY1とは?

DUMMYという名前にもあるように

ずばりその名の通り、ダミーテーブルです。

IBMREQDというCHAR型の列が1つだけ存在し、

常に1行だけ、値は'Y'が入っています。

SYSIBM.SYSDUMMY1 カタログ・ビュー

上記のIBMドキュメントの説明の欄に

「'Y'」とだけ書いてあるのが直球ですね。

どんなときに使うのか

ダミーテーブルって・・・一体何に使うの?

関数や特殊レジスターを参照するときに使う

関数や特殊レジスターを参照するときでもSQLでは

SELECT句を使います。

Db2のSELECT句ではFROMによるテーブルの指定が必要です。

このときFROMで指定するテーブルとしてSYSIBM.SYSDUMMY1を使います。

CURRENT DATEという今日の日にちを得ることができる

特殊レジスターを参照する例は次の通りです。

 
SELECT CURRENT DATE FROMSYSIBM.SYSDUMMY1

主にSELECT句で指定すべきテーブルがないときに使われます。

OracleのDUALと同じイメージだと思われます。

SYSIBM.SYSDUMMY1を使わないと・・・

SYSIBM.SYSDUMMY1を使わずに

先の例のCURRENT DATEを参照することも、もちろん可能です。

しかし適当なテーブルを指定してSELECT句を実行すると

その適当なテーブルに存在するレコードの数だけレコードが返ってきてしまいます。

(当たり前ですが)

そんなときDb2ではFETCHステートメントを使って

返ってくるレコード数を1行だけに制限することができます。

次の例ではEMPLOYEEというテーブルを指定しています。

 
SELECT CURRENT DATE FROMEMPLOYEE FETCH FIRST 1 ROWS ONLY

こうすることで1行分だけCURRENT DATEを得ることができます。

・・・ここまでやるなら大人しくSYSIBM.SYSDUMMY1を使いましょう。

終わりに

しれっと登場するSYSIBM.SYSDUMMY1は

Db2の縁の下の力持ち的存在。

そんなSYSIBM.SYSDUMMY1についての解説でした。