DB2/400 V5R3 新機能からいくつか

V5R3 からサポートされるようになったデータベースのいろいろな新機能をいくつかちょっと試してみました。

SELECT MONTHNAME(CURRENT_DATE) FROM SYSIBM/SYSDUMMY1

SELECT DAYNAME(CURRENT_DATE) FROM SYSIBM/SYSDUMMY1

SELECT INSERT('<TD>&1</TD>',5,2,' 住所 ') FROM SYSIBM/SYSDUMMY1

5桁目から 2桁分を 4つめの引数で置き換える、という機能ですね。

SELECT REPLACE('123 456', ' ', '-') FROM SYSIBM/SYSDUMMY1

1つめの引数の中の 2つめの引数の文字を 3つめの引数に置き換える、という機能です。

実際に実行できてます、ということで一応の画面コピーです。

SELECT DATABASE() FROM SYSIBM/SYSDUMMY1

現在作業を行っている WRKRDBDIRE でのデータベース名が返ってきます。

同じ名前のカラムがある場合、以下のような構文でもジョインを行うことができます。

SELECT * FROM SAMPLEDB/EMPPROJACT JOIN SAMPLEDB/PROJECT
USING(PROJNO)

SELECT 文を 2つ実行し INTERSECT を使うと、両方の結果セットにあるすべての行が結合された結果セットが戻ってきます。

SELECT EMPNO FROM SAMPLEDB/EMPLOYEE WHERE WORKDEPT = 'D11'
INTERSECT
SELECT EMPNO FROM SAMPLEDB/EMPPROJACT WHERE PROJNO = 'MA2112' OR
PROJNO = 'MA2113' OR PROJNO = 'AD3111' ORDER BY EMPNO

上は Information Center に載っている例ですが、
プロジェクト MA2112、MA2113、および AD3111 で働いている部門 D11 のすべての従業員が検索されます。

SELECT 文を 2つ実行し EXCEPT を使うと、最初の結果セットにあるすべての行から 2番目の結果セットと一致するものを除いたものが戻ってきます。

SELECT EMPNO FROM SAMPLEDB/EMPLOYEE WHERE WORKDEPT = 'D11'
EXCEPT
SELECT EMPNO FROM SAMPLEDB/EMPPROJACT WHERE PROJNO = 'MA2112' OR
PROJNO = 'MA2113' OR PROJNO = 'AD3111' ORDER BY EMPNO

こちらも Information Center に載っている例ですが、
プロジェクト MA2112、MA2113、および AD3111で働いていない部門 D11 のすべての社員が検索されます。

LATERAL キーワードを使うと、ネストされた副照会の中から、ネストの外のカラムを参照させることができます。

SELECT O.JHCHUB, CUSTOMER.TKNAKJ, OL.LINETOTAL FROM QEOL/JUMIDP O,
LATERAL (SELECT SUM(JDKING) AS LINETOTAL FROM QEOL/JUMEIP LINES
WHERE LINES.JDCHUB = O.JHCHUB) AS OL
JOIN QEOL/TOKMSP CUSTOMER ON CUSTOMER.TKBANG = O.JHTOKB

Infomation Center に載っている例です。

SELECT D.DEPTNO, D.DEPTNAME, EMPINFO.AVGSAL, EMPINFO.EMPCOUNT
FROM SAMPLEDB/DEPARTMENT D,
LATERAL (SELECT AVG(E.SALARY) AS AVGSAL,COUNT (*) AS EMPCOUNT
FROM SAMPLEDB/EMPLOYEE E
WHERE E.WORKDEPT = D.DEPTNO ) AS EMPINFO

[Top Pageに戻る]

Ads by TOK2