コマンド行 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

Read syntax diagramSkip visual syntax diagramCALLprocedure-name( ,expression?null )

CLOSE

Read syntax diagramSkip visual syntax diagramCLOSEcursor-name

CONNECT

Read syntax diagramSkip visual syntax diagramCONNECTTOserver-namelock-blockauthorizationRESETauthorization1
authorization
Read syntax diagramSkip visual syntax diagramUSERauthorization-namepasswordsaccesstoken2APIKEYapi-key3
passwords
Read syntax diagramSkip visual syntax diagramUSINGpasswordNEWpasswordCONFIRMpasswordCHANGE PASSWORD
accesstoken
Read syntax diagramSkip visual syntax diagramACCESSTOKENtoken4ACCESSTOKENTYPEtoken-type
lock-block
Read syntax diagramSkip visual syntax diagramIN SHARE MODEIN EXCLUSIVE MODEON SINGLE NODE
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

Read syntax diagramSkip visual syntax diagramDECLAREcursor-nameCURSOR WITH HOLDDATABASEdbnameUSERuserUSINGpasswordFOR select-statementXQUERYxquery-statement

FETCH

Read syntax diagramSkip visual syntax diagramFETCHFROMcursor-name FORALLnROWROWSLOBCOLUMNCOLUMNSALLINTOfilenameAPPENDNEWOVERWRITE

OPEN

Read syntax diagramSkip visual syntax diagramOPENcursor-name
注:
  1. 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>'), ?)
  2. CONNECT の CLP バージョンを使用すると、ユーザーは、 次のパラメーターを使用してパスワードを変更することができます。
    NEW password
    ユーザー名に割り当てられる新規パスワードを指定します。 パスワードの長さは、最大で 18 文字です。 パスワードが変更されるシステムは、 ユーザー認証がセットアップされた方法によって異なります。
    CONFIRM password
    新規パスワードと同一のストリング。 このパラメーターは、入力エラーを検出するために使用されます。
    CHANGE PASSWORD
    このオプションが指定されていると、ユーザーにプロンプトが出され、 現在のパスワード、新規パスワード、および新規パスワードの確認を要求します。 入力時にパスワードは表示されません。
  3. DECLARE CURSORステートメントのDATABASE句は、カーソルが後続のカーソルからのロード操作に使われる場合にのみ適用されます。
  4. XQuery ステートメントとともに DECLARE CURSOR ステートメントを使用するには、ユーザーが XQuery ステートメントの接頭部としてキーワード XQUERY を明示する必要があります。
  5. FETCH が コマンド行プロセッサーを介して発行されると、10 進数および浮動小数点数がテリトリーの小数点区切り文字 (つまり、 U.S内のピリオド (.)) とともに表示されます。 カナダ、U.K; 他のほとんどの国/地域では、コンマ (,) が使われます。 ただし、INSERT、UPDATE、CALL、およびその他の SQL ステートメントを コマンド行プロセッサー を介して発行して表を更新する場合は、コンマを使用する国/地域であっても、小数点区切り文字としてピリオドを使用する必要があります。
  6. 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
  7. 新しい LOB オプションが FETCH に追加されています。 LOB 節を指定する場合は、次の行だけがフェッチされます。
    • LOB 列を含む表を照会するためにコマンド行プロセッサーを介して SELECT が発行された場合、出力ではすべての列が 8 KB に切り捨てられます。
    • 各 LOB 列の値は、filename.xxxと呼ばれるファイルにフェッチされます。ここで、filenameはLOB句に指定され、Xxx001から999までのファイル拡張子です(001は対応DECLARE CURSOR ステートメントの選択リストの最初のLOB列、002は2 番目のLOB 列、999は999th列です)。 ファイルにフェッチできる LOB 列の最大数は 999 です。
    • データを含むファイルの名前は LOB 列に表示されます。
  8. コマンド行プロセッサーは、BLOB 列を 16 進表記で表示します。
  9. 適切な変換関数を使用できない場合には、 構造化タイプ列への参照を含む SQL ステートメントを発行することはできません。
  10. SQL ステートメント、および SQL ステートメント・コンポーネントを含む CLP コマンドに関する CLP の制限 (64K) は、除去されました。 ただし、行ごとの CLP の出力サイズに関する 64K の制限があります。
  11. SELECT、CALL、または XQuery を介して取得される XML データは、出力で 4000 バイトに切り捨てられます。
CLP を介する SQL ステートメントを使用してデータベースを照会する場合、 CLP がデータを表示する仕方を変更するには、 CLP バインド・ファイルを照会するデータベースに対して再バインドします。 例えば、日時を ISO 形式で表示したい場合、次のようにできます。
  1. CLP バインド・ファイルの名前を含むテキスト・ファイルを作成する。 このファイルは、 1 回の BIND コマンドで複数のファイルをバインドする場合のリスト・ファイルとして使用します。 この例では、ファイル名はclp.lstで、その内容は以下のとおりです。
       db2clpcs.bnd +
       db2clprr.bnd +
       db2clpur.bnd +
       db2clprs.bnd +
       db2clpns.bnd
  2. データベースに接続します。
  3. 次のコマンドを発行します。
       db2 bind @clp.lst collection nullid datetime iso
表 1. SQL ステートメント (Db2®)
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
注:
  1. このリストのすべてのステートメントは静的 SQL としてコーディングできますが、 動的 SQL としてコーディングできるのは X になっているステートメントだけです。
  2. このステートメントは実行できません。
  3. Xは、SQLExecDirect()またはSQLPrepare()SQLExecute()のいずれかでこのステートメントを実行できることを示します。 同等の CLI 関数がある場合は、関数名がリストされます。
  4. このステートメントは動的ではありませんが、 CLI では、 SQLExecDirect()または SQLPrepare()SQLExecute()のいずれかを呼び出すときにこのステートメントを指定できます。
  5. CREATE TRIGGER ステートメント内だけで使用できます。
  6. SQL DESCRIBE ステートメントは出力を記述するためにのみ使用できますが、 CLI では入力を記述することもできます ( SQLDescribeParam() 関数を使用)。
  7. SQL FETCH ステートメントは、一度に 1 行ずつ一方向にフェッチするためにのみ使用できます。一方、 CLI SQLExtendedFetch() および SQLFetchScroll() 関数では、フェッチして配列に入れることができます。 さらに、どの方向でも、また結果セットのどの位置でもフェッチができます。
  8. DESCRIBE SQL ステートメントの構文は、CLP DESCRIBE コマンドの構文と異なります。
  9. ステートメントは、フェデレーテッド・データベース・サーバーでのみサポートされます。
  10. SQL プロシージャーは、索引、表、 ビューには CREATE および DROP ステートメントしか発行できません。