/ *
*パラメータfieldsは、
データテーブルのすべてのフィールドの配列タイプを示します
* データテーブルのフィールドを取得するSQLステートメントを以下に示します* /
private static CharSequence createUpdateTrriger(String tableName, String[] fields) {
StringBuilder sb = new StringBuilder();
sb.append("create trigger tri_"+tableName+"_update\n"
+ " after UPDATE on " + tableName + "\n"
+ " for each row\n "
+ "begin\n"
+ " insert into " + tableName +"_his"+ "\n"
+ "(" + "id_his");
for(int i = 0 ; i < fields.length ; i++){
if(!"QZKRKSJ".equals(fields[i])&& !"QZKXGSJ".equals(fields[i]) && !"".equals(fields[i])){
sb.append(", "+ "`"+fields[i]+"`");
}
}
sb.append(",htime");//time_trig
sb.append(")\n"
+ "(SELECT REPLACE(UUID(), '-', '')");
for(int i = 0 ; i < fields.length ; i++){
if(!"QZKRKSJ".equals(fields[i])&& !"QZKXGSJ".equals(fields[i]) && !"".equals(fields[i])){
sb.append(",new."+ fields[i]);
}
}
sb.append(",now());\nend; " + "\n" + "\n");
return sb.toString();
}
获取数据表的字段的sql语句:
String sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name ='"+tableName+"'"+"and TABLE_SCHEMA='"+schema+"'";
さらに、トリガー
は、トリガーに関する非表示のバグデータベースの移行プロセス中に実行されます。図に示すように、トリガー作成ステートメントのコメントには、前のトリガーで作成されたユーザー名が含まれます。
移行後、データソースのユーザー名が変更された場合、システムはエラーを報告し、元のユーザーが見つかりません。
エラー:定義者として指定されたユーザー( 'ユーザー名' @ '%')は存在しません
。ユーザー名を置き換えてトリガーを再作成してください。