001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.plugin.table; 017 018import java.io.File; 019import java.io.PrintWriter; 020import java.util.Locale; 021 022import org.opengion.fukurou.system.OgBuilder ; // 6.4.4.1 (2016/03/18) 023import org.opengion.fukurou.db.DBUtil; 024import org.opengion.fukurou.db.Transaction; // 5.5.2.6 (2012/05/25) 025import org.opengion.fukurou.util.ErrorMessage; 026import org.opengion.fukurou.util.FileUtil; 027import org.opengion.fukurou.util.FixLengthData; 028import org.opengion.fukurou.util.StringUtil; 029import org.opengion.hayabusa.common.HybsSystem; 030import org.opengion.hayabusa.common.HybsSystemException; 031import org.opengion.hayabusa.db.AbstractTableFilter; 032import org.opengion.hayabusa.db.DBTableModel; 033 034/** 035 * TableFilter_TABLE は、TableFilter インターフェースを継承した、DBTableModel 処理用の 036 * 実装クラスです。 037 * 038 * ここでは、テーブル一覧の検索結果より、GF05 のテーブルカラム定義テーブルから 039 * 必要な情報を取得し、テーブル作成スクリプトを作成します。 040 * 出力ファイルは、テーブル名+"S.sql" という命名規則で作成します。 041 * 検索では、(SYSTEM_ID,TBLSYU,TABLE_NAME,NAME_JA,TABLESPACE_NAME,INITIAL_EXTENT,COMMENTS) 042 * の項目を取得する必要があります。 043 * 044 * 6.1.0.0 (2014/12/26) より、NEXT_EXTENT は使用しなくなりました。 045 * 046 * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するか、BODY 部にCSS形式で記述します。 047 * 【パラメータ】 048 * { 049 * DIR : {@BASE_DIR}/sql/install/01_TABLE ; 出力ファイルの基準フォルダ(必須) 050 * XML : false ; XML出力を行うかどうか[true/false]を指定します(初期値:false)。 051 * } 052 * 053 * @og.formSample 054 * ●形式: 055 * select SYSTEM_ID,TBLSYU,TABLE_NAME,NAME_JA,TABLESPACE_NAME,INITIAL_EXTENT,COMMENTS from GF02 056 * 057 * ① <og:tableFilter classId="TABLE" keys="DIR,XML" vals='"{@BASE_DIR}/sql/install/01_TABLE,"' /> 058 * 059 * ② <og:tableFilter classId="TABLE" > 060 * { 061 * DIR : {@BASE_DIR}/sql/install/01_TABLE ; 062 * XML : false ; 063 * } 064 * </og:tableFilter> 065 * 066 * @og.rev 4.0.0.0 (2005/08/31) 新規作成 067 * @og.rev 5.6.6.0 (2013/07/05) keys の整合性チェックを追加 068 * @og.rev 8.1.0.3 (2022/01/21) TableFilter_TABLE のORACLE部分をTableFilter_TABLE_ORACLEに移動する。 069 * 070 * @version 0.9.0 2000/10/17 071 * @author Kazuhiko Hasegawa 072 * @since JDK1.1, 073 */ 074public class TableFilter_TABLE extends AbstractTableFilter { 075 /** このプログラムのVERSION文字列を設定します。 {@value} */ 076 private static final String VERSION = "8.1.0.3 (2022/01/21)" ; 077 078 // 6.1.0.0 (2014/12/26) NEXT_EXTENT は、使いません。 079 private static final String[] DBKEY = {"SYSTEM_ID","TBLSYU","TABLE_NAME","NAME_JA", 080 "TABLESPACE_NAME","INITIAL_EXTENT","COMMENTS" }; 081 082 // 5.1.1.0 (2009/12/01) データのアクセス用の配列番号のIDを private ⇒ protected にします。 083 /** データのアクセス用の配列番号 {@value} */ 084 protected static final int SYSTEM_ID = 0; 085 /** データのアクセス用の配列番号 {@value} */ 086 protected static final int TBLSYU = 1; 087 /** データのアクセス用の配列番号 {@value} */ 088 protected static final int TABLE_NAME = 2; 089 /** データのアクセス用の配列番号 {@value} */ 090 protected static final int NAME_JA = 3; 091 /** データのアクセス用の配列番号 {@value} */ 092 protected static final int TABLESPACE_NAME = 4; 093 /** データのアクセス用の配列番号 {@value} */ 094 protected static final int INITIAL_EXTENT = 5; 095 /** データのアクセス用の配列番号 {@value} */ 096 protected static final int COMMENTS = 6; // 6.1.0.0 (2014/12/26) NEXT_EXTENT は、使いません。 097 098 private static final String GF05_SEL = "SELECT CLM,SEQNO,NAME_JA,CLS_NAME,USE_LENGTH,DATA_DEFAULT,NOT_NULL,'' AS OPTS" 099 + " FROM GF05" 100 + " WHERE SYSTEM_ID=? AND TBLSYU=? AND TABLE_NAME=?" 101 + " AND FGJ='1'" 102 + " ORDER BY SEQNO" ; 103 104 /** データのアクセス用の配列番号 {@value} */ 105 protected static final int GF05_CLM = 0; 106 /** データのアクセス用の配列番号 {@value} */ 107 protected static final int GF05_SEQNO = 1; 108 /** データのアクセス用の配列番号 {@value} */ 109 protected static final int GF05_NAME_JA = 2; 110 /** データのアクセス用の配列番号 {@value} */ 111 protected static final int GF05_CLS_NAME = 3; 112 /** データのアクセス用の配列番号 {@value} */ 113 protected static final int GF05_USE_LENGTH = 4; 114 /** データのアクセス用の配列番号 {@value} */ 115 protected static final int GF05_DATA_DEFAULT= 5; 116 /** データのアクセス用の配列番号 {@value} */ 117 protected static final int GF05_NOT_NULL = 6; 118 /** データのアクセス用の配列番号 {@value} */ 119 protected static final int GF05_OPTIONS = 7; 120 121 // private static final String ENCODE = "Windows-31J" ; 122 private static final String ENCODE = "UTF-8" ; // 4.3.6.6 (2009/05/15) 123 124 private static final String CMNT = "************************************************************************" ; 125 126 private static final int X = FixLengthData.X ; // type 定数 127 private static final int S = FixLengthData.S ; // type 定数 128 private static final int K = FixLengthData.K ; // type 定数 129 private static final int T = FixLengthData.T ; // addLen 定数 130 private static final int T2= FixLengthData.T2 ; // addLen 定数 131 132 /** 各種定数 */ 133 // 6.0.2.3 (2014/10/10) AbstractTableFilter へ移動 134 135 /** XML形式かどうか */ 136 137 /** 138 * デフォルトコンストラクター 139 * 140 * @og.rev 6.4.1.1 (2016/01/16) keysMap を、サブクラスから設定させるように変更。 141 */ 142 public TableFilter_TABLE() { 143 super(); 144 initSet( "DIR" , "出力ファイルの基準フォルダ(必須)" ); 145 initSet( "XML" , "XML出力を行うかどうか[true/false]を指定(初期値:false)" ); 146 } 147 148 /** 149 * DBTableModel処理を実行します。 150 * 151 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 152 * @og.rev 4.0.0.0 (2007/11/28) メソッドの戻り値をチェックします。 153 * @og.rev 4.3.7.0 (2009/06/01) トリガー、SEQUENCE作成機能、XML出力機能追加 154 * @og.rev 5.1.1.0 (2009/12/01) XML_START_TAG に、tableName をセットします。 155 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対応 156 * @og.rev 5.5.2.6 (2012/05/25) protected変数を、private化したため、getterメソッドで取得するように変更 157 * @og.rev 5.6.6.0 (2013/07/05) FixLengthData の簡易コンストラクタを使用 158 * @og.rev 6.0.2.3 (2014/10/10) isXml で、CR + EXEC_END_TAG のキャッシュを作成します。 159 * @og.rev 6.3.7.0 (2015/09/04) AutoCloseableを使用したtry-with-resources構築に対応。 160 * @og.rev 6.5.0.1 (2016/10/21) ErrorMessage をまとめるのと、直接 Throwable を渡します。 161 * @og.rev 8.1.0.3 (2022/01/21) 引数にtableNameを渡すように変更。 162 * 163 * @return 実行結果のテーブルモデル 164 */ 165 public DBTableModel execute() { 166 isXml = StringUtil.nval( getValue( "XML" ), false ); 167 168// execEndTag = isXml ? CR + EXEC_END_TAG : ";" ; // 6.0.2.3 (2014/10/10) 169 execEndTag = isXml ? ";" + CR + EXEC_END_TAG : ";" ; // 8.1.0.3 (2022/01/21) 『;』と改行を追加 170 171 final File dir = new File( getValue( "DIR" ) ); 172 if( ! dir.exists() && ! dir.mkdirs() ) { 173 final String errMsg = "所定のフォルダが作成できませんでした。[" + dir + "]" ; 174 // 4.3.4.4 (2009/01/01) 175 throw new HybsSystemException( errMsg ); 176 } 177 178 // カンマ,カラム,クラス,(,桁数,),初期値,NOT_NULL,拡張機能,コメント開始,行番号,名称,コメント終了 179 final int[] addLen = new int[] { 0,T,0,0,0,T2,T,T,T2,0,1,T,0 }; // 各データ間のスペース 180 final int[] type = new int[] { X,X,X,X,S,X, X,X,X, X,S,K,X }; // 各データの種別 X:半角 S:空白前埋め K:全角混在 181 final FixLengthData fixData = new FixLengthData( addLen,type ); 182 183 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid declaring a variable if it is unreferenced before a possible exit point. 184 final DBTableModel table = getDBTableModel(); // 5.5.2.6 (2012/05/25) インターフェースにgetterメソッド追加 185 final Transaction tran = getTransaction(); // 5.5.2.6 (2012/05/25) 186 final int[] clmNo = getTableColumnNo( DBKEY ); 187 final int rowCnt = table.getRowCount(); 188 for( int row=0; row<rowCnt; row++ ) { 189 // 6.3.7.0 (2015/09/04) AutoCloseableを使用したtry-with-resources構築に対応。 190 final String[] data = table.getValues( row ); // 6.3.9.1 (2015/11/27) 191 final String systemId = data[clmNo[SYSTEM_ID]]; 192 final String tblsyu = data[clmNo[TBLSYU]]; 193 final String tableName = data[clmNo[TABLE_NAME]]; 194 195 try( PrintWriter writer = FileUtil.getPrintWriter( new File( dir,tableName + ( isXml ? "S.xml" : "S.sql" ) ),ENCODE ) ) { 196 197 if( isXml ) { writer.println( XML_START_TAG.replace( "xxx",tableName ) ); } // 5.1.1.0 (2009/12/01) tableName をセット 198 writer.print( makeHeadLine( clmNo,data ) ); 199 200 final String[] vals = new String[] { systemId,tblsyu,tableName }; 201 final String[][] gf05 = DBUtil.dbExecute( GF05_SEL,vals,tran ); // 5.1.9.0 (2010/08/01) Transaction 対応 202 203 String uniqName = null; 204 fixData.clear(); 205 // 値セット:まずは、最大長を求める必要がある。 206 for( int i=0; i<gf05.length; i++ ) { 207 final String[] outData = makeLineList( gf05[i],i==0 ); 208 fixData.addListData( outData ); 209 210 // 4.3.7.0 (2009/06/01) 211 if( "UNIQ".equalsIgnoreCase( gf05[i][GF05_CLM] ) || "UNIQSEQ".equalsIgnoreCase( gf05[i][GF05_CLM] ) ) { 212 uniqName = gf05[i][GF05_CLM].toUpperCase( Locale.JAPAN ); 213 } 214 } 215 // 固定長化:最大長であわせた文字列を出力します。 216 for( int i=0; i<gf05.length; i++ ) { 217 writer.println( fixData.getFixData( i ) ); 218 } 219 writer.println( makeEndLine( clmNo,data ) ); 220 221 // 4.3.7.0 (2009/06/01) UNIQ項目のSEQとトリガーを作成 222 if( uniqName != null ) { 223// writer.println( makeUniqSeq( clmNo,data ) ); 224// writer.println( makeUniqTrig( clmNo,data, uniqName ) ); 225 writer.println( makeUniqSeq( tableName ) ); // 8.1.0.3 (2022/01/21) 226 writer.println( makeUniqTrig( tableName, uniqName ) ); // 8.1.0.3 (2022/01/21) 227 } 228 229 if( isXml ) { writer.println( XML_END_TAG ); } 230 } 231 catch( final RuntimeException ex ) { // catch は、close() されてから呼ばれます。 232 // 6.5.0.1 (2016/10/21) ErrorMessage をまとめるのと、直接 Throwable を渡します。 233 final ErrorMessage errMessage = makeErrorMessage( "TableFilter_TABLE Error",ErrorMessage.NG ) 234 .addMessage( row+1,ErrorMessage.NG,"TABLE" 235 , "TABLE=[" + tableName + "]" 236 , StringUtil.array2csv( data ) 237 ) 238 .addMessage( ex ); 239 240 // BAT から呼び出す場合があるため、標準エラー出力にも情報を出しておきます。 241 System.out.println( errMessage ); 242 } 243 } 244 245 return table; 246 } 247 248 /** 249 * ヘッダー部分の処理を実行します。 250 * 251 * @og.rev 5.6.6.0 (2013/07/05) FixLengthData の簡易コンストラクタを使用 252 * @og.rev 5.6.6.2 (2013/07/19) EXEC_START_TAG の付け忘れ 253 * @og.rev 6.4.4.2 (2016/04/01) StringBuilderの代わりに、OgBuilderを使用する。 254 * @og.rev 8.1.0.3 (2022/01/21) EXEC_SQLに、exists属性追加。 255 * 256 * @param clmNo カラム番号配列 257 * @param data 1行分のデータ配列 258 * 259 * @return ヘッダー部分の文字列 260 * @og.rtnNotNull 261 */ 262 protected String makeHeadLine( final int[] clmNo,final String[] data ) { 263 final String TBL_NAME = data[clmNo[TABLE_NAME]]; 264 265 final String LINE1 = TBL_NAME + " ( " + data[clmNo[NAME_JA]] + " )" ; 266 final String LINE2 = data[clmNo[COMMENTS]] ; 267 final String LINE3 = "Created : " + HybsSystem.getDate() ; 268 269 // 5.6.6.0 (2013/07/05) FixLengthData の簡易コンストラクタを使用 270 final int[] addLen = new int[] { 0,0,0 }; // 各データ間のスペース 271 final int[] type = new int[] { X,K,X }; // 各データの種別 X:半角 S:空白前埋め K:全角混在 272 final FixLengthData fixData = new FixLengthData( addLen,type ); 273 274 final String[][] outData = new String[][] { 275 { "/**", CMNT , "**/" }, 276 { "/* ", LINE1, " */" }, 277 { "/* ", LINE2, " */" }, 278 { "/* ", LINE3, " */" }, 279 { "/**", CMNT , "**/" }, 280 }; 281 282 fixData.addAllListData( outData ); 283 284 // 6.4.4.2 (2016/04/01) 285 final OgBuilder buf = new OgBuilder(); 286 fixData.getAllFixData( buf.getBuilder() ); // OgBuilder の内部 Builder に、fixData のデータを書き込む。 287// return buf.appendIfCR( isXml , EXEC_START_TAG ) 288// .appendCR( "CREATE TABLE " , TBL_NAME , " (" ) 289// .toString(); 290 291 // 8.1.0.3 (2022/01/21) EXEC_SQLに、exists属性追加。 292 return buf.appendIfCR( isXml , EXEC_EXISTS_0_TAG ) 293 .appendIfCR( isXml , execExistsSQL , TBL_NAME , "');" ) // EXISTS_0 判定は、XML の場合のみ。 294 .appendCR( "CREATE TABLE " , TBL_NAME , " (" ) 295 .toString(); 296 } 297 298 /** 299 * 各行部分(カラム定義)の処理を実行します。 300 * カンマ,カラム,クラス,(,桁数,),初期値,NOT_NULL,拡張機能,コメント開始,行番号,名称,コメント終了 301 * の順に配列にセットします。 302 * 303 * @og.rev 5.5.1.9 (2012/04/18) useLen.length=0対応 304 * @og.rev 5.9.13.2 (2016/10/28) シングルクォート対応 305 * 306 * @param data 1行分のデータ配列 307 * @param first 最初の行かどうか[true:最初/false:それ以降] 308 * 309 * @return 各行部分(カラム定義)配列 310 */ 311 protected String[] makeLineList( final String[] data,final boolean first ) { 312 // カンマ,カラム,クラス(桁数),初期値,NOT_NULL,独自拡張,行番号,名称,終了 313 final String[] outData = new String[13]; // 6.3.9.1 (2015/11/27) 314 final String clsName = data[GF05_CLS_NAME]; 315 316 outData[0] = first ? " " : " , " ; // 0:カンマ 317 outData[1] = data[GF05_CLM] ; // 1:カラム 318 319 if( clsName.startsWith( "CLOB" ) || clsName.startsWith( "DATE" ) ) { 320 data[GF05_USE_LENGTH] = null; 321 } 322 final String useLen = data[GF05_USE_LENGTH]; 323 if( useLen != null && ! useLen.equals( "0" ) && useLen.length() > 0 ) { // 5.5.1.9 (2012/04/18) 324 outData[2] = clsName ; // 2:クラス 325 outData[3] = " ( " ; // 3:( 326 outData[4] = useLen ; // 4:桁数 327 outData[5] = " )" ; // 5:) 328 } 329 else { 330 outData[2] = clsName ; // NUMBER型の桁数指定なしのケース 331 } 332 333 final String def = data[GF05_DATA_DEFAULT]; 334 if( def != null && def.length() > 0 ) { 335 final String comma = clsName.indexOf( "CHAR" ) >= 0 && def.indexOf( '\'' ) < 0 ? "'" : "" ; // 5.9.13.2 (2016/10/28) 336 outData[6] = "DEFAULT " + comma + def + comma ; // 6:初期値 337 } 338 339 final String notNull = data[GF05_NOT_NULL]; 340 if( notNull != null && notNull.equals( "1" ) ) { 341 outData[7] = "NOT NULL" ; // 7:NOT_NULL 342 } 343 344 final String options = data[GF05_OPTIONS]; 345 if( options != null ) { 346 outData[8] = options ; // 8:拡張機能 347 } 348 349 final String nameJA = data[GF05_NAME_JA] ; // 名称 350 if( nameJA != null ) { 351 outData[9] = "/* " ; // 9:コメント開始 352 outData[10] = data[GF05_SEQNO] ; // 10:行番号 353 outData[11] = nameJA ; // 11:名称 354 outData[12] = "*/" ; // 12:コメント終了 355 } 356 357 return outData ; 358 } 359 360 /** 361 * 定義の最後の部分の処理を実行します。 362 * 363 * @og.rev 8.1.0.3 (2022/01/21) TableFilter_TABLE のORACLE部分をTableFilter_TABLE_ORACLEに移動する。 364 * 365 * @param clmNo カラム番号配列 366 * @param data 1行分のデータ配列 367 * 368 * @return 定義の最後の部分 369 * @og.rtnNotNull 370 */ 371 protected String makeEndLine( final int[] clmNo,final String[] data ) { 372 return ")" + execEndTag ; // 6.0.2.3 (2014/10/10) 改行を含める。 373 } 374 375// /** 376// * 定義の最後の部分の処理を実行します。 377// * 378// * 6.1.0.0 (2014/12/26) より、 379// * 1.TABLESPACE_NAME を指定しない場合は、TABLESPACE 句を出力しません。 380// * 2.INITIAL_EXTENT を 0 で指定した場合は、STORAGE 句を出力しません。 381// * 3.NEXT と PCTINCREASE は、出力しません。 382// * 383// * @og.rev 6.0.2.3 (2014/10/10) isXml で、CR + EXEC_END_TAG のキャッシュを作成します。 384// * @og.rev 6.1.0.0 (2014/12/26) TABLESPACE_NAME,INITIAL_EXTENT が未設定の場合、設定しません。 385// * @og.rev 6.4.4.1 (2016/03/18) StringBuilderの代わりに、OgBuilderを使用する。 386// * 387// * @param clmNo カラム番号配列 388// * @param data 1行分のデータ配列 389// * 390// * @return 定義の最後の部分 391// * @og.rtnNotNull 392// */ 393// protected String makeEndLine( final int[] clmNo,final String[] data ) { 394// 395// // 6.1.0.0 (2014/12/26) TABLESPACE_NAME,INITIAL_EXTENT が未設定の場合、設定しません。 396// final String tblSpcse = data[clmNo[TABLESPACE_NAME]] ; 397// final String initExt = data[clmNo[INITIAL_EXTENT]] ; 398// 399// return new OgBuilder() 400// .append( ")" ) 401// .appendIf( !StringUtil.isNull( tblSpcse ) 402// , CR , "TABLESPACE " , tblSpcse ) 403// .appendIf( !StringUtil.isNull( initExt ) && initExt.charAt(0) != '0' 404// , CR , "STORAGE( INITIAL " , initExt , "K )" ) 405// .append( execEndTag ) 406// .toString(); 407// } 408 409 /** 410 * ユニークシーケンスの作成処理を実行します。 411 * 412 * @og.rev 8.1.0.3 (2022/01/21) 引数にtableNameを渡すように変更。 413 * @og.rev 8.1.0.3 (2022/01/21) TableFilter_TABLE のORACLE部分をTableFilter_TABLE_ORACLEに移動する。 414 * 415// * @param clmNo カラム番号配列 416// * @param data 1行分のデータ配列 417 * @param tableName テーブル名 418 * 419 * @return ユニークシーケンス 420 * @og.rtnNotNull 421 */ 422// protected String makeUniqSeq( final int[] clmNo,final String[] data ) { 423 protected String makeUniqSeq( final String tableName ) { 424 return ""; 425 } 426 427// /** 428// * ユニークシーケンスの作成処理を実行します。 429// * 430// * @og.rev 5.1.9.0 (2010/08/01) シーケンス名を[TABLE_NAME]S00に変更 431// * @og.rev 6.0.2.3 (2014/10/10) isXml で、CR + EXEC_END_TAG のキャッシュを作成します。 432// * @og.rev 6.4.4.1 (2016/03/18) StringBuilderの代わりに、OgBuilderを使用する。 433// * @og.rev 8.1.0.3 (2022/01/21) 引数にtableNameを渡すように変更。 434// * 435//// * @param clmNo カラム番号配列 436//// * @param data 1行分のデータ配列 437// * @param tableName テーブル名 438// * 439// * @return ユニークシーケンス 440// * @og.rtnNotNull 441// */ 442//// protected String makeUniqSeq( final int[] clmNo,final String[] data ) { 443// protected String makeUniqSeq( final String tableName ) { 444// return new OgBuilder() 445// .appendCR() 446// .appendIfCR( isXml , EXEC_START_TAG ) 447//// .appendCR( "CREATE SEQUENCE " , data[clmNo[TABLE_NAME]] , "S00 " ) 448// .appendCR( "CREATE SEQUENCE " , tableName , "S00 " ) // 8.1.0.3 (2022/01/21) 449// .append( " INCREMENT BY 1 START WITH 1 MAXVALUE 999999999 CYCLE NOCACHE" ) 450// .append( execEndTag ) 451// .toString(); 452// } 453 454 /** 455 * ユニークシーケンスと関連付けるトリガの作成処理を実行します。 456 * 457// * @param clmNo カラム番号配列 458// * @param data 1行分のデータ配列 459 * @param tableName テーブル名 460 * @param uniqName ユニークトリガ名 461 * 462 * @og.rev 8.1.0.3 (2022/01/21) 引数にtableNameを渡すように変更。 463 * @og.rev 8.1.0.3 (2022/01/21) TableFilter_TABLE のORACLE部分をTableFilter_TABLE_ORACLEに移動する。 464 * 465 * @return ユニークシーケンスと関連付けるトリガ 466 * @og.rtnNotNull 467 */ 468// protected String makeUniqTrig( final int[] clmNo,final String[] data, final String uniqName ) { 469 protected String makeUniqTrig( final String tableName, final String uniqName ) { 470 return ""; 471 } 472 473// /** 474// * ユニークシーケンスと関連付けるトリガの作成処理を実行します。 475// * 476// * @og.rev 5.1.9.0 (2010/08/01) トリガー名を[TABLE_NAME]T00に変更 477// * @og.rev 6.4.4.1 (2016/03/18) StringBuilderの代わりに、OgBuilderを使用する。 478// * @og.rev 8.1.0.3 (2022/01/21) 引数にtableNameを渡すように変更。 479// * 480//// * @param clmNo カラム番号配列 481//// * @param data 1行分のデータ配列 482// * @param tableName テーブル名 483// * @param uniqName ユニークトリガ名 484// * 485// * @return ユニークシーケンスと関連付けるトリガ 486// * @og.rtnNotNull 487// */ 488//// protected String makeUniqTrig( final int[] clmNo,final String[] data, final String uniqName ) { 489// protected String makeUniqTrig( final String tableName, final String uniqName ) { 490//// final String TBL_NAME = data[clmNo[TABLE_NAME]] ; 491// 492// return new OgBuilder() 493// .appendCR() 494// .appendIfCR( isXml , EXEC_START_TAG ) 495// .appendCR( "CREATE OR REPLACE TRIGGER " , tableName , "T00 " ) 496// .appendCR( " BEFORE INSERT ON " , tableName ) 497// .appendCR( " FOR EACH ROW " ) 498// .appendCR( " BEGIN " ) 499// .append( " SELECT " , tableName , "S00.NEXTVAL INTO :NEW." ) 500// .appendCR( uniqName , " FROM DUAL; " ) 501// .appendCR( " END; " ) 502// .appendCase( isXml , EXEC_END_TAG , "/" ) // isXmlで選択されます。true/false 503// .toString(); 504// } 505}