1

JDBC(com.ibm.db2.jcc.DB2Driver v。1.4.2)を使用してDB2データベースに接続します。

次のようなプロシージャを作成する必要がある場合:

CREATE PROCEDURE "Schema".makeUniqueCode(IN keyName VARCHAR(30),IN fieldName VARCHAR(30), IN tableName VARCHAR(30))
LANGUAGE SQL
BEGIN
DECLARE COD VARCHAR(30);
DECLARE LASTCOD VARCHAR(30);
DECLARE at_end INT DEFAULT 0;
...
END%

SQLコマンドターミネータをから;新しい文字に変更する必要があります...を選択します%

createprocedureコマンドをfile.sqlに入れてDB2CLI(db2プロンプト)を使用すると、SQLコマンドターミネーターを変更するのは非常に簡単です。

私の問題は、createprocedureコマンドを実行するためにJDBCドライバーによるリモート接続を使用する必要があることです。

JDBCドライバーによるリモート接続を使用してSQLコマンドターミネーターを変更するための正しい構文は何ですか?

4

2 に答える 2

2

コマンド ターミネータは、データベース自体ではなく、データベースに接続するプログラムの機能です。データベースは、区切り文字で区切られた複数のコマンドを含む SQL ファイルの存在をまったく認識しません。SQL エディターまたはクライアントは、それらが処理される場所です。

現在、データベースに接続するプログラムを作成しいるため、複数のコマンドを実行する場合は、自分で管理する必要があります。JDBC およびその他のデータベース ドライバーは、単一のコマンドを実行するためのインターフェイスを提供します。実行するコマンドごとにそのインターフェイスを使用するだけです。

JDBC からの 1 回の呼び出しで一連のコマンドを一度に実行できるようにしたい場合は、それらをストアド プロシージャに入れるか、BEGIN ATOMIC...END.

于 2013-02-08T11:42:03.120 に答える
1

レオナルドがやろうとしていることは完全に有効であるため、質問はまだ実際には答えられていないと思います.JDBCを介してCREATE PROCEDUREの単一のDDLステートメントを送信しますが、プロシージャ内に複数のステートメントを持つルーチン本体が含まれています.

これを送信する方法については、公式の DB2 サンプルを参照してください。これはトリガー用の DDL 用ですが、これはルーチン用の DDL にも当てはまります。

ソースコードサンプル「TbTrig.java」

于 2016-07-12T07:09:15.573 に答える