コマンド行 SQL ステートメントおよび XQuery ステートメントの使用
この節では、 コマンド行から SQL (構造化照会言語) ステートメントを使用する方法について説明します。
これらのステートメントは、 オペレーティング・システムのコマンド・プロンプトから直接実行できるもので、 コマンドをアプリケーション・プログラムに書き込む場合とほぼ同じようにして、 データベースの表や索引やビューに格納されている情報を定義したり処理したりするのに使用できます。 情報については追加や削除や更新ができます。レポートは表の内容から生成できます。
コマンド行から SQL ステートメントを使用できます。SQL を介して CLP コマンドを実行するストアード・プロシージャー (SYSPROC.ADMIN_CMD()) を使用できます。 このストアード・プロシージャーの使用方法について詳しくは、『SQL 管理ルーチン』を参照してください。
CLPでXQuery ステートメントを発行するには、ステートメントの前にXQUERY
キーワードを付けてください。
注意:CLPを使用してXQuery文を発行する場合は、セミコロン以外の終端文字を選択するのが最善です(-tオプション)。 名前空間宣言もセミコロンで終了するため、こうすることによって、名前空間宣言を使用するステートメントまたは照会が誤って認識されないようにします。
コマンド行プロセッサーを介して実行できるすべての SQL ステートメントは、 表 1の CLP 列にリストされています。 SQL ステートメントの構文は、コマンド行から実行できるものであれ、
ソース・プログラムに組み込まれているものであれ、すべてが「SQL リファレンス」に記述されています。 多くの場合、組み込み SQL ステートメントと CLP SQL ステートメントの構文は同じです。 ただし、ホスト変数、パラメーター・マーカー、記述子名、
およびステートメント名は、組み込み SQL にのみ適用できます。 CALL、CLOSE、CONNECT、DECLARE CURSOR、FETCH、および OPEN の構文は、
組み込み型のものと CLP によって実行されるものとでは違います。 これらのステートメントの CLP 構文を以下のセクションに示します。
CALL
CLOSE
CONNECT
Notes:
- 1 This form is only valid if implicit connect is enabled.
- 2 This feature is available starting from Db2 Version 11.5 Mod Pack 4.
- 3 This feature is available starting from Db2 Version 11.5 Mod Pack 4.
- 4 This feature is available starting from Db2 Version 11.5 Mod Pack 4.
DECLARE CURSOR
FETCH
OPEN
注:
- CALL の発行時には、以下のことが必要です。
- プロシージャーの各 IN または INOUT パラメーターごとに式を使用することが必要です。 INOUT パラメーターの場合、式は単一のリテラル値でなければなりません。 INOUT XML パラメーターは NULL (NULL 可能である場合)、または XMLPARSE(DOCUMENT string) という形式でなければなりません。 XMLPARSE の引数内の string はストリング・リテラルでなければならず、CURRENT IMPLICIT XMLPARSE OPTION 特殊レジスターに制限されます。 式にすることはできません。
- プロシージャーの各 OUT パラメーターごとに、疑問符 (?) を使用することが必要です。
- ストアード・プロシージャーはカタログされている必要があります。 カタログされていないプロシージャーが呼び出されると、SQL0440N エラー・メッセージが戻ります。
以下の CLP スクリプトは、XML 列 C1 を含む表の作成後に PROC4 と呼ばれるプロシージャーを作成します。 これは、IN (PARM1)、INOUT (PARM2)、および OUT (PARM3) の 3 つの XML パラメーターを使用し、結果セットを XML データで戻します。
CREATE TABLE TAB4(C1 XML) CREATE PROCEDURE PROC4(IN PARM1 XML, INOUT PARM2 XML, OUT PARM3 XML) LANGUAGE SQL BEGIN DECLARE STMT CLOB(1M) DEFAULT ''; DECLARE C1 CURSOR WITH RETURN FOR S1; SET STMT = 'SELECT C1 FROM TAB4'; /* INSERT PARM1 */ INSERT INTO TAB4 VALUES(PARM1); /* MANIPULATE PARM2 */ /* SET PARM3 AND INSERT */ SET PARM3 = XMLPARSE(DOCUMENT '<a>333</a>'); INSERT INTO TAB4 VALUES(PARM3); /* RETURN A RESULT SET WITH XML DATA */ PREPARE S1 FROM STMT; OPEN C1; END
コマンド行プロセッサーからプロシージャー PROC4 を呼び出すには、以下の CALL ステートメントを発行します。
CALL PROC4(XMLPARSE(DOCUMENT '<a>111</a>'), XMLPARSE(DOCUMENT '<a>222</a>'), ?)
- CONNECT の CLP バージョンを使用すると、ユーザーは、
次のパラメーターを使用してパスワードを変更することができます。
- NEW password
- ユーザー名に割り当てられる新規パスワードを指定します。 パスワードの長さは、最大で 18 文字です。 パスワードが変更されるシステムは、 ユーザー認証がセットアップされた方法によって異なります。
- CONFIRM password
- 新規パスワードと同一のストリング。 このパラメーターは、入力エラーを検出するために使用されます。
- CHANGE PASSWORD
- このオプションが指定されていると、ユーザーにプロンプトが出され、 現在のパスワード、新規パスワード、および新規パスワードの確認を要求します。 入力時にパスワードは表示されません。
DECLARE CURSOR
ステートメントのDATABASE
句は、カーソルが後続のカーソルからのロード操作に使われる場合にのみ適用されます。- XQuery ステートメントとともに DECLARE CURSOR ステートメントを使用するには、ユーザーが XQuery ステートメントの接頭部としてキーワード XQUERY を明示する必要があります。
- FETCH が コマンド行プロセッサーを介して発行されると、10 進数および浮動小数点数がテリトリーの小数点区切り文字 (つまり、 U.S内のピリオド (.)) とともに表示されます。 カナダ、U.K; 他のほとんどの国/地域では、コンマ (,) が使われます。 ただし、INSERT、UPDATE、CALL、およびその他の SQL ステートメントを コマンド行プロセッサー を介して発行して表を更新する場合は、コンマを使用する国/地域であっても、小数点区切り文字としてピリオドを使用する必要があります。
- FETCH が コマンド行プロセッサーを介して発行される場合、通常、NULL 値はハイフン (-) として表示されます。 DFT_SQLMATHWARN YES で構成されたデータベースの場合、算術計算エラーになる式は NULL 値として処理されます。 そのような算術計算エラー NULL 値は、プラス (+) で表示されます。例えば、表 t1 を次のように作成します。
create table t1 (i1 int , i2 int); insert into t1 values (1,1),(2,0),(3,null);
ステートメントselect i1/i2 from t1
は、以下の結果を生成します。1 --- 1 + - 3 records selected
- 新しい LOB オプションが FETCH に追加されています。 LOB 節を指定する場合は、次の行だけがフェッチされます。
- LOB 列を含む表を照会するためにコマンド行プロセッサーを介して SELECT が発行された場合、出力ではすべての列が 8 KB に切り捨てられます。
- 各 LOB 列の値は、filename.xxxと呼ばれるファイルにフェッチされます。ここで、filenameはLOB句に指定され、Xxx は
001
から999
までのファイル拡張子です(001
は対応DECLARE CURSOR ステートメントの選択リストの最初のLOB列、002
は2 番目のLOB 列、999
は999th列です)。 ファイルにフェッチできる LOB 列の最大数は 999 です。 - データを含むファイルの名前は LOB 列に表示されます。
- コマンド行プロセッサーは、BLOB 列を 16 進表記で表示します。
- 適切な変換関数を使用できない場合には、 構造化タイプ列への参照を含む SQL ステートメントを発行することはできません。
- SQL ステートメント、および SQL ステートメント・コンポーネントを含む CLP コマンドに関する CLP の制限 (64K) は、除去されました。 ただし、行ごとの CLP の出力サイズに関する 64K の制限があります。
- SELECT、CALL、または XQuery を介して取得される XML データは、出力で 4000 バイトに切り捨てられます。
CLP を介する SQL ステートメントを使用してデータベースを照会する場合、
CLP がデータを表示する仕方を変更するには、
CLP バインド・ファイルを照会するデータベースに対して再バインドします。 例えば、日時を ISO 形式で表示したい場合、次のようにできます。
- CLP バインド・ファイルの名前を含むテキスト・ファイルを作成する。 このファイルは、
1 回の BIND コマンドで複数のファイルをバインドする場合のリスト・ファイルとして使用します。 この例では、ファイル名は
clp.lst
で、その内容は以下のとおりです。db2clpcs.bnd + db2clprr.bnd + db2clpur.bnd + db2clprs.bnd + db2clpns.bnd
- データベースに接続します。
- 次のコマンドを発行します。
db2 bind @clp.lst collection nullid datetime iso
SQL ステートメント | 動的1 | コマンド行プロセッサー (CLP) | コール・レベル・インターフェース3 (CLI) | SQL プロシージャー |
---|---|---|---|---|
ALLOCATE CURSOR | X | |||
代入文 | X | |||
ASSOCIATE LOCATORS | X | |||
ALTER {BUFFERPOOL, DATABASE PARTITION GROUP, NICKNAME,9 SERVER,9 TABLE, TABLESPACE, USER MAPPING,9 TYPE、VIEW} | X | X | X | |
BEGIN DECLARE SECTION2 | ||||
CALL | X | X | X | X |
CASE ステートメント | X | |||
CLOSE | X | SQLCloseCursor() , SQLFreeStmt() |
X | |
COMMENT ON | X | X | X | X |
COMMIT | X | X | SQLEndTran() , SQLTransact() |
X |
コンパウンド SQL (組み込み) | X4 | |||
コンパウンド・ステートメント | X | |||
CONNECT (タイプ 1) | X | SQLBrowseConnect() , SQLConnect() , SQLDriverConnect() |
||
CONNECT (タイプ 2) | X | SQLBrowseConnect() , SQLConnect() , SQLDriverConnect() |
||
CREATE {ALIAS, BUFFERPOOL, DATABASE PARTITION GROUP, DISTINCT TYPE, EVENT MONITOR, FUNCTION, FUNCTION MAPPING9, GLOBAL TEMPORARY TABLE, INDEX, INDEX EXTENSION, METHOD, NICKNAME,9 PROCEDURE、SCHEMA、SERVER、TABLE、TABLESPACE、TRANSFORM、TYPE MAPPING、9 TRIGGER、USER MAPPING、9 TYPE、VIEW、WRAPPER9 } | X | X | X | X10 |
DECLARE CURSOR2 | X | SQLAllocStmt() |
X | |
DECLARE GLOBAL TEMPORARY TABLE | X | X | X | X |
DELETE | X | X | X | X |
説明8 | X | SQLColAttributes() 、 SQLDescribeCol() 、 SQLDescribeParam() 6 |
||
DISCONNECT | X | SQLDisconnect() |
||
DROP | X | X | X | X10 |
END DECLARE SECTION2 | ||||
EXECUTE | SQLExecute() |
X | ||
EXECUTE IMMEDIATE | SQLExecDirect() |
X | ||
EXPLAIN | X | X | X | X |
FETCH | X | SQLExtendedFetch() , SQLFetch() , SQLFetchScroll() |
X | |
FLUSH EVENT MONITOR | X | X | X | |
FOR ステートメント | X | |||
FREE LOCATOR | X4 | X | ||
GET DIAGNOSTICS | X | |||
GOTO ステートメント | X | |||
GRANT | X | X | X | X |
IF ステートメント | X | |||
組み込み2 | ||||
INSERT | X | X | X | X |
ITERATE | X | |||
LEAVE ステートメント | X | |||
LOCK TABLE | X | X | X | X |
LOOP ステートメント | X | |||
OPEN | X | SQLExecute() , SQLExecDirect() |
X | |
PREPARE | SQLPrepare() |
X | ||
REFRESH TABLE | X | X | X | |
RELEASE | X | X | ||
RELEASE SAVEPOINT | X | X | X | X |
RENAME TABLE | X | X | X | |
RENAME TABLESPACE | X | X | X | |
REPEAT ステートメント | X | |||
RESIGNAL ステートメント | X | |||
RETURN ステートメント | X | |||
REVOKE | X | X | X | |
ROLLBACK | X | X | SQLEndTran() , SQLTransact() |
X |
SAVEPOINT | X | X | X | X |
select-statement | X | X | X | X |
SELECT INTO | X | |||
SET CONNECTION | X | SQLSetConnection() |
||
SET CURRENT DEFAULT TRANSFORM GROUP | X | X | X | X |
SET CURRENT DEGREE | X | X | X | X |
SET CURRENT EXPLAIN MODE | X | X | X, SQLSetConnectAttr() |
X |
SET CURRENT EXPLAIN SNAPSHOT | X | X | X, SQLSetConnectAttr() |
X |
SET CURRENT PACKAGESET | ||||
SET CURRENT QUERY OPTIMIZATION | X | X | X | X |
SET CURRENT REFRESH AGE | X | X | X | X |
SET EVENT MONITOR STATE | X | X | X | X |
SET INTEGRITY | X | X | X | |
SET PASSTHRU9 | X | X | X | X |
SET PATH | X | X | X | X |
SET SCHEMA | X | X | X | X |
SET SERVER OPTION9 | X | X | X | X |
SET 遷移変数5 | X | X | X | X |
SIGNAL ステートメント | X | |||
SIGNAL SQLSTATE5 | X | X | X | |
UPDATE | X | X | X | X |
VALUES INTO | X | |||
WHENEVER2 | ||||
WHILE ステートメント | X | |||
注:
|