public class DBCopyTag extends CommonTagSupport
データベースのデータコピー/移動/更新/削除を行うタグです。検索結果のデータを、action に応じた方法で、処理します。 SELECT文は、BODY部に記述することも可能です。 BODY にSELECT文を記述しない場合は、names と、table から、SELECT文を作成します。 names2 は、INSERTやUPDATE の カラム名で、SELECT文の先頭から順に適用します。 WHERE条件は、SELECT結果を利用できますが、必ず、names2 のカラムか、そうでないならば、 それ以降に記述してください。 このタグは、DBTableModel を経由せず、直接、接続元から接続先へデータ処理を行います。 接続元の1レコード単位に、接続先に対して、処理を実行します。 よって、大量データ処理が可能ですが、まとめ処理を行っていない分、時間が掛かります。 用途としては、WORKテーブルへのデータコピーや、BKUPテーブルへのコピーが考えられ ますが、それらは、select insert などの直接的な処理のほうが良いです。 ここでは、別ユーザーや、別インスタンス、または、別データベース(ORACLEから、MySQLへ)など、 dbid違いのテーブルへのデータ処理用途を、想定しています。 なので、複雑な処理や、PL/SQL等のデータベース独自処理は行えません。 SELECT文は、直接記述できるため、データベース固有の関数や、構文を記載可能ですが、 INSERT,UPDATE,DELETE 文は、基本的に共通構文であり、WHERE条件等も、一般的は範囲に とどめてください。 SELECTカラムとINSERTカラムが異なる場合は、name 指定と、name2 指定のカラムが対応します。 追加、更新先のカラム名に変更して置いてください。 BODY部にSELECT文を記述した場合は、カラム順が、name 順となり、name2 と対応されます。 constKeys,constVals も、更新先のカラム名で指定します。 処理の途中でエラー(例えば、ユニークキー制約等)になった場合は、stopError属性の 値に応じて処理を継続するかどうかを決定します。 stopError="true" が初期値なので、エラー時点で、処理を中断します。 action="INSERT" SELECT結果を、table2 に、INSERT します。where2,whereNames2 は使用しません。 name2 を使用しない場合は、name と同じカラム配列で、INSERT します。 stopError="false"(エラー時も継続する) とした場合、SELECT結果は、最後まで INSERTを試みます。 action="UPDATE" SELECT結果を、table2 に、where2,whereNames2 に基づいて UPDATE します。 SELECTには、更新で使用する where条件となるカラムを含める必要があります。 更新するカラムは、name2 で指定することになります。 更新対象が存在しなかった場合は、エラーとは判定していません。 action="DELETE" SELECT結果を、table2 に、where2,whereNames2 に基づいて table2 のデータを 削除 します。 SELECTには、削除で使用する where条件となるカラムを含める必要があります。 削除対象が存在しなかった場合は、エラーとは判定していません。 action="MERGE" SELECT結果を、table2 に、where2,whereNames2 に基づいて UPDATE/INSERT します。 SELECTには、更新で使用する where条件となるカラムを含める必要があります。 更新するカラムは、name2 で指定することになります。 更新対象が存在しなかった場合は、INSERT になります。 (つまり、更新を一度試みて、更新件数が、0件の場合に、INSERTします。) INSERTするカラムは、SELECTしたすべてのカラムが対象になります。 useDelete="true" を指定すると、検索元のデータを削除します。 INSERT 時に指定すれば、MOVE と同じ効果になります。 stopError="false" (エラー時でも処理を継続する)にした場合、検索元のデータ削除は、 エラー行については、実行されません。ただし、UPDATE,DELETE 等で、対象データが 存在しない場合は、エラーと判断しないため、検索元のデータを削除します。 SystemData の USE_SQL_INJECTION_CHECK が true か、quotCheck 属性が true の場合は、 SQLインジェクション対策用のシングルクォートチェックを行います。リクエスト引数に シングルクォート(')が含まれると、エラーになります。 DBLastSql はセットされません。 つまり、このタグでSELECTされたデータを、ファイル出力することはできません。 実行後にリクエストパラメータに以下の値がセットされます。 DB.COUNT : 検索結果の件数 DB.UPCOUNT : 追加/更新/削除結果の件数 DB.ERR_CODE : 検索結果のエラーコード(複数合った場合は、最後のエラーコード) ※ このタグは、Transaction タグの対象です。
●形式: ・<og:dbCopy action="INSERT" table="TEST_A" table2="TEST_B" /> TEST_A のすべてカラム、データを、TEST_B にコピーします。 ・<og:dbCopy action="UPDATE" names2="A2,B2" table2="TEST_B" where2="C2=[c1]" > select a1,b1,c1 from TEST_A where d1='XXX' order by a1 </og:dbCopy> TEST_A のa1→A2 , b1→B2 カラムに、WHERE条件 TEST_B.C2 が、TEST_A.c1 に一致するデータのみ 更新します。 ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) ●Tag定義: <og:dbCopy action 【TAG】実行方法[INSERT/UPDATE/DELETE/MERGE]を指定します(初期値:INSERT)。 useDelete 【TAG】(jdbcオプション)検索した元のデータを削除するかどうか[true:削除する/false:なにもしない]を指定します(初期値:false)。 maxRowCount 【TAG】(通常は使いません)データの最大読み込み件数を指定します (初期値:0:[無制限]) stopZero 【TAG】検索結果が0件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する]) dbid 【TAG】検索する対象のDB接続IDを指定します(初期値:null) table 【TAG】検索する対象のテーブル名を指定します names 【TAG】検索する対象のカラム名をCSV形式で複数指定します(初期値:*) where 【TAG】検索する対象を特定するキー条件(where句)を指定します orderBy 【TAG】検索する対象の検索順(order by句)を指定します dbid2 【TAG】登録する対象のDB接続IDを指定します(初期値:null) table2 【TAG】登録する対象のテーブル名を指定します names2 【TAG】登録する対象のカラム名をCSV形式で複数指定します omitNames2 【TAG】登録する対象外のカラム名をCSV形式で複数指定します where2 【TAG】登録する対象を特定するキー条件(where句)を指定します whereNames2 【TAG】登録する対象を特定するキー条件(where句)をCSV形式で複数指定します constKeys2 【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します constVals2 【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します quotCheck 【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=true]) stopError 【TAG】登録処理エラーの時に処理を中止するかどうか[true/false]を設定します(初期値:true) dispError 【TAG】エラー時にメッセージを表示するか[true/false]を設定します。通常はstopErrorと併用(初期値:true) fetchSize 【TAG】(通常は使いません)データのフェッチサイズを指定します(初期値:DB_FETCH_SIZE[=251]) caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) > ... Body ... </og:dbCopy> ●使用例 ・<og:dbCopy action="INSERT" names2="A2,B2,C2" table2="TEST_B" > select a1,b1,c1 from TEST_A where d1='XXX' order by a1 </og:dbCopy> TEST_A のa1→A2 , b1→B2 , c1→C2 カラムに、追加します。 ・<og:dbCopy action="INSERT" names="a1,b1,c1" table="TEST_A" names2="A2,B2,C2" table2="TEST_B" /> TEST_A のa1→A2 , b1→B2 , c1→C2 カラムに、追加します。 (先の例と同じ処理) ・<og:dbCopy action="INSERT" table="TEST_A" where="d1='1'" dbid="LOCAL" dbid2="OTHER" > 接続先:LOCAL の TEST_A の 全カラムのd1='1' のレコードを、接続先:OTHER のTEST_A に追加します。 接続先違い(ユーザー、やデータベース違い)へのINSERTです。 table2 を指定しない場合は、table と同じとみなされます。 ・<og:dbCopy action="INSERT" table="TEST_A" where="d1='1'" dbid="LOCAL" dbid2="OTHER" stopError="false" useDelete="true" > 接続先:LOCAL の TEST_A の 全カラムのd1='1' のレコードを、接続先:OTHER のTEST_A に移動します。 接続先違い(ユーザー、やデータベース違い)への移動です。 先のINSERT が成功したレコードは削除され、最後まで処理が行われます。 INSERTが失敗(つまり、接続先:OTHER にすでに、ユニークレコードが存在する場合など)時の、検索元のレコードは 削除されません。 ・<og:dbCopy action="MERGE" table="TEST_A" where="d1='1'" dbid="LOCAL" names2="a1,b1,c1" dbid2="OTHER" where="ukey=[ukey]" stopError="false" useDelete="true" > 接続先:LOCAL の TEST_A の 全カラムのd1='1' のレコードを、接続先:OTHER のTEST_A に移動します。 接続先:OTHER に、移動先.ukey=[移動元ukey] のデータがあれば、name2="a1,b1,c1" カラムだけ、UPDATE を行い、 更新件数が、0件の場合は、検索したすべてのカラムで、INSERT を行います。
修飾子とタイプ | フィールドと説明 |
---|---|
static java.lang.String |
ACT_DELETE
action 引数に渡す事の出来る アクションコマンド 削除する "DELETE"
|
static java.lang.String |
ACT_INSERT
action 引数に渡す事の出来る アクションコマンド 追加する "INSERT"
|
static java.lang.String |
ACT_MERGE
action 引数に渡す事の出来る アクションコマンド マージする "MERGE"
|
static java.lang.String |
ACT_UPDATE
action 引数に渡す事の出来る アクションコマンド 更新する "UPDATE"
|
BR, BUFFER_MIDDLE, CR
bodyContent
id, pageContext
EVAL_BODY_BUFFERED, EVAL_BODY_TAG
EVAL_BODY_AGAIN
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
コンストラクタと説明 |
---|
DBCopyTag()
デフォルトコンストラクター
|
修飾子とタイプ | メソッドと説明 |
---|---|
int |
doAfterBody()
Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
|
int |
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
|
int |
doStartTag()
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
|
protected void |
release2()
タグリブオブジェクトをリリースします。
|
void |
setAction(java.lang.String action)
【TAG】実行方法を指定します[INSERT/UPDATE/DELETE/MERGE] (初期値:INSERT)。
|
void |
setConstKeys2(java.lang.String keys)
【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します。
|
void |
setConstVals2(java.lang.String vals)
【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します。
|
void |
setDbid(java.lang.String id)
【TAG】(通常は使いません)検索する対象のDB接続IDを指定します(初期値:null)。
|
void |
setDbid2(java.lang.String id)
【TAG】登録する対象のDB接続IDを指定します(初期値:null)。
|
void |
setDispError(java.lang.String flag)
【TAG】エラー時にメッセージを表示するか[true/false]を設定します。
|
void |
setFetchSize(java.lang.String size)
【TAG】(通常は使いません)データのフェッチサイズを指定します
(初期値:DB_FETCH_SIZE[=251])。
|
void |
setMaxRowCount(java.lang.String count)
【TAG】(通常は使いません)データの最大読み込み件数を指定します(初期値:0:[無制限])。
|
void |
setNames(java.lang.String names)
【TAG】検索する対象のカラム名をCSV形式で複数指定します(初期値:*)。
|
void |
setNames2(java.lang.String names)
【TAG】登録する対象のカラム名をCSV形式で複数指定します(初期値:null)。
|
void |
setOmitNames2(java.lang.String omitNames)
【TAG】登録対象外のカラム名をCSV形式で複数指定します(初期値:null)。
|
void |
setOrderBy(java.lang.String orderBy)
【TAG】検索する対象の検索順(order by句)を指定します。
|
void |
setQuotCheck(java.lang.String flag)
【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します
(初期値:USE_SQL_INJECTION_CHECK[=true])。
|
void |
setStopError(java.lang.String flag)
【TAG】登録処理エラーの時に処理を中止するかどうか[true/false]を設定します(初期値:true)。
|
void |
setStopZero(java.lang.String cmd)
【TAG】検索結果が0件のとき処理を停止するかどうか[true/false]を指定します(初期値:false[続行する])。
|
void |
setTable(java.lang.String table)
【TAG】検索する対象のテーブル名を指定します(初期値:null)。
|
void |
setTable2(java.lang.String table)
【TAG】登録する対象のテーブル名を指定します(初期値:null)。
|
void |
setUseDelete(java.lang.String useDel)
【TAG】(jdbcオプション)検索した元のデータを削除するかどうか[true:削除する/false:なにもしない]を指定します(初期値:false)。
|
void |
setWhere(java.lang.String where)
【TAG】検索する対象を特定するキー条件(where句)を指定します。
|
void |
setWhere2(java.lang.String where)
【TAG】登録する対象を特定するキー条件(where句)を指定します。
|
void |
setWhereNames2(java.lang.String names)
【TAG】登録する対象を特定するキー条件(where句)をCSV形式で複数指定します。
|
java.lang.String |
toString()
このオブジェクトの文字列表現を返します。
|
add, add, addEventColumn, addEventColumn, check, commitTableObject, debugPrint, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getCSVParameter, getDataCondition, getDateFormat, getDBColumn, getDBFunctionName, getDocumentLink, getGUIInfo, getGUIInfoAttri, getHostName, getLabel, getLabelInterface, getLanguage, getLASTAttri, getLongLabel, getMsg, getMsglbl, getNVLAttri, getObject, getParameterNames, getParameterRows, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getSumRequestValue, getTagName, getTransaction, getUser, getUserEditInfo, getUserInfo, isAjaxSubmitRequest, isDebug, isNoTransitionRequest, isNull, jspPrint, makeUrl, removeContextAttribute, removeObject, removeRequestAttribute, removeSessionAttribute, set, setAjaxSubmitRequest, setCaseIf, setCaseKey, setCaseNN, setCaseNull, setCaseVal, setContextAttribute, setCookie, setDebug, setLanguage, setLbl, setNoTransitionRequest, setObject, setObject, setParameterNames, setParameterRows, setRequestAttribute, setRequestCacheData, setScope, setSessionAttribute, setUserInfo, startQueryTransaction, sys, sysBool, sysInt, useMainTrans, useQuotCheck, useTag, useXssCheck
doInitBody, getBodyContent, getPreviousOut, release, setBodyContent
findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getParent, setPageContext, setParent
public static final java.lang.String ACT_INSERT
public static final java.lang.String ACT_UPDATE
public static final java.lang.String ACT_DELETE
public static final java.lang.String ACT_MERGE
public int doStartTag()
doStartTag
インタフェース内 Tag
doStartTag
クラス内 CommonTagSupport
public int doAfterBody()
doAfterBody
インタフェース内 IterationTag
doAfterBody
クラス内 CommonTagSupport
public int doEndTag()
doEndTag
インタフェース内 Tag
doEndTag
クラス内 CommonTagSupport
protected void release2()
release2
クラス内 CommonTagSupport
public void setAction(java.lang.String action)
action
- アクション [INSERT/UPDATE/DELETE/MERGE]public void setUseDelete(java.lang.String useDel)
useDel
- 検索した元のデータを削除するかどうかpublic void setMaxRowCount(java.lang.String count)
count
- 最大件数public void setStopZero(java.lang.String cmd)
cmd
- 0件時停止可否 [true:処理を中止する/false:続行する]public void setDbid(java.lang.String id)
id
- データベース接続IDpublic void setTable(java.lang.String table)
table
- テーブル名public void setNames(java.lang.String names)
names
- 引数の名称 (CSV形式)public void setWhere(java.lang.String where)
where
- 検索条件 (where句)public void setOrderBy(java.lang.String orderBy)
orderBy
- 検索条件 (order By句)public void setDbid2(java.lang.String id)
id
- データベース接続IDpublic void setTable2(java.lang.String table)
table
- テーブル名public void setNames2(java.lang.String names)
names
- 引数の名称 (CSV形式)public void setOmitNames2(java.lang.String omitNames)
omitNames
- 登録対象外のカラム列 (CSV形式)public void setWhere2(java.lang.String where)
where
- 検索条件 (where句)public void setWhereNames2(java.lang.String names)
names
- 登録条件カラム (where句)作成のためのカラム名(CSV形式)public void setConstKeys2(java.lang.String keys)
keys
- 固定値カラム (CSV形式)setConstVals2( String )
public void setConstVals2(java.lang.String vals)
vals
- 設定値(CSV形式)setConstKeys2( String )
public void setQuotCheck(java.lang.String flag)
flag
- クォートチェック [true:する/それ以外:しない]public void setStopError(java.lang.String flag)
flag
- エラー時処理中止 [true:中止する/false:中止しない]public void setDispError(java.lang.String flag)
flag
- [true:表示する/false:表示しない]public void setFetchSize(java.lang.String size)
size
- フェッチ行数public java.lang.String toString()
toString
クラス内 CommonTagSupport
Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.