0

問題: Oracle DB に対して実行される .SQL ファイルに数百の sql insert ステートメントがあります。カンマなどを見逃していないかどうかを検出したいなど、挿入ステートメントが正しく形成されていることを確認したいだけです。ステートメントがエラーなしで実行されることを確認したいだけです。だから私はそれが実行される前にスクリプトをチェックするために小さなJavaアプリケーションを書くことを考えていますか?

サンプルクエリ:

INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(24553, 'IBM');

DBで実行する前でもこれを確認したい。DBにアクセスできないとしましょう。

4

4 に答える 4

0

javaを知っている場合は、この正規表現パターンを使用できますが、(または)を取得しません。私は一生の間、ブラケットに一致する方法を理解できません。これはあなたの例でのみ機能し、インサート全体が同じ行にある必要があり、1行に1つのインサートしかありません。

Pattern.compile("^\\s*INSERT\\s+INTO\\s+[a-zA-Z]\\w*\\s*.\\s*[a-zA-Z]\\w*\\s*,\\s*[a-zA-Z]\\w*\\s*.\\s*VALUES\\s*.\\s*\\d+\\s*,\\s*'\\w*\\'\\s*.\\s*;\\s*$");

于 2013-03-13T19:30:39.237 に答える
0

各 SQL ステートメントの前に「explain plan for」を付けてみてください。SQL が無効な場合、Explain は失敗します。

于 2013-03-13T18:42:41.300 に答える
0

はい、可能です。

擬似コードは

loop through lines
{
 Take the string between first '(' and ')' position;
 split the string into first array with separator ',' using split function.

 Take the string between second '(' and ')' position;
 split the string into  second array with separator ',' using split function.

 compare the no of size for first and second array.
 if they are not equal 
 print the statement for correction;
}

これがあなたを助けることを願っています

于 2013-03-13T18:45:28.580 に答える
0

私はこれまで Oracle で作業したことがないので、有効にできる DUMMY/Test モードがあるかどうかはわかりません。

入力ミスなどをチェックするだけなら、すべてのテーブル名をデュアルに置き換えて挿入を実行します。これは、データ型の列数を検証しません...

于 2013-03-13T18:48:28.723 に答える