SqlDMEnum.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package jnpf.database.sql.enums;
  2. import jnpf.database.enums.DbAliasEnum;
  3. import jnpf.database.enums.ParamEnum;
  4. import jnpf.database.source.DbBase;
  5. import jnpf.database.sql.enums.base.SqlFrameBase;
  6. import jnpf.database.sql.model.DbStruct;
  7. import jnpf.util.StringUtil;
  8. import lombok.AllArgsConstructor;
  9. import lombok.Getter;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * 达梦 SQL语句模板
  14. *
  15. * @author JNPF开发平台组 YanYu
  16. * @version V3.3
  17. * @copyright 引迈信息技术有限公司
  18. * @date 2022/3/17
  19. */
  20. @Getter
  21. @AllArgsConstructor
  22. public enum SqlDMEnum implements SqlFrameBase{
  23. /* =============================== 系统语句 ==================================== */
  24. FIELDS(
  25. "SELECT \n" +
  26. "\tA.COLUMN_NAME AS " + DbAliasEnum.FIELD.getAlias() + ",\n" +
  27. "\tA.DATA_TYPE AS " + DbAliasEnum.DATA_TYPE.getAlias() + ",\n" +
  28. "\tA.DATA_LENGTH AS " + DbAliasEnum.CHAR_LENGTH.getAlias() + ",\n" +
  29. "\tA.DATA_PRECISION AS " + DbAliasEnum.NUM_PRECISION.getAlias() + ",\n" +
  30. "\tA.DATA_SCALE AS " + DbAliasEnum.NUM_SCALE.getAlias() + ",\n" +
  31. "\tCASE WHEN E.CONSTRAINT_TYPE IS NOT NULL THEN '1' ELSE '0' END AS " + DbAliasEnum.PRIMARY_KEY.getAlias() + ",\n" +
  32. "\tCASE A.NULLABLE WHEN 'N' THEN '0' ELSE '1' END AS " + DbAliasEnum.ALLOW_NULL.getAlias() + ",\n" +
  33. "\tB.COMMENTS AS " + DbAliasEnum.FIELD_COMMENT.getAlias() + ",\n" +
  34. "\tH.IS_AUTO AS " + DbAliasEnum.AUTO_INCREMENT.getAlias() + "\n" +
  35. "FROM \n" +
  36. "\tALL_TAB_COLUMNS A -- 表&字段 OWNER、TABLE_NAME、COLUMN_NAME_\t\n" +
  37. "LEFT JOIN \n" +
  38. "\tALL_COL_COMMENTS B -- 字段注释 TABLE_NAME、COLUMN_NAME\n" +
  39. "ON \n" +
  40. "\tA.OWNER = B.SCHEMA_NAME AND A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME \n" +
  41. "LEFT JOIN \n" +
  42. "\t(\n" +
  43. "\t\tSELECT \n" +
  44. "\t\t\tC.OWNER, C.TABLE_NAME, C.COLUMN_NAME, D.CONSTRAINT_TYPE \n" +
  45. "\t\tFROM \n" +
  46. "\t\t\tALL_CONS_COLUMNS C\n" +
  47. "\t\tLEFT JOIN \n" +
  48. "\t\t\tALL_CONSTRAINTS D \n" +
  49. "\t\tON \n" +
  50. "\t\t\tC.CONSTRAINT_NAME = D.CONSTRAINT_NAME AND D.CONSTRAINT_TYPE = 'P'\n" +
  51. "\t\tWHERE\n" +
  52. "\t\t\tC.OWNER = " + ParamEnum.DB_NAME.getParamSign() + "\n" +
  53. "\t\t\tAND C.TABLE_NAME = " + ParamEnum.TABLE.getParamSign() + "\n" + // 添加模式与表,增加查询效率
  54. "\t) E\n" +
  55. "ON\n" +
  56. "\tA.OWNER = E.OWNER AND A.TABLE_NAME = E.TABLE_NAME AND A.COLUMN_NAME = E.COLUMN_NAME \n" +
  57. "LEFT JOIN \n" +
  58. "\t(\n" +
  59. "\t\tSELECT \n"+
  60. "\t\t\tF.NAME, DECODE(F.INFO2,1,'1','0') AS IS_AUTO \n" +
  61. "\t\tFROM \n"+
  62. "\t\t\tSYS.SYSCOLUMNS F\n" +
  63. "\t\tWHERE\n" +
  64. "\t\t\tID ="+
  65. "\t(\n"+
  66. "\t\tSELECT \n"+
  67. "\t\t\tOBJECT_ID \n" +
  68. "\t\tFROM \n" +
  69. "\t\t\tDBA_OBJECTS G \n"+
  70. "\t\tWHERE \n" +
  71. "\t\t\tG.OWNER = " + ParamEnum.DB_NAME.getParamSign() + "\n" +
  72. "\t\t\tAND G.OBJECT_NAME = " + ParamEnum.TABLE.getParamSign() + "\n" +
  73. "\t\t\tAND G.OBJECT_TYPE = 'TABLE') \n" +
  74. "\t) H\n" +
  75. "ON \n" +
  76. "\tA.COLUMN_NAME = H.NAME \n" +
  77. "WHERE\n" +
  78. " A.OWNER = " + ParamEnum.DB_NAME.getParamSign() + "\n" +
  79. "\tAND A.TABLE_NAME = " + ParamEnum.TABLE.getParamSign() + "\n" +
  80. "\tORDER BY A.COLUMN_ID"
  81. ){
  82. @Override
  83. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  84. list.add(dbStruct.getDmDbSchema());
  85. list.add(table);
  86. list.add(dbStruct.getDmDbSchema());
  87. list.add(table);
  88. list.add(dbStruct.getDmDbSchema());
  89. list.add(table);
  90. }
  91. },
  92. TABLES(
  93. // 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,
  94. // 包含该表的自身-表的行数、数据块数、行长等信息;列的分析--列值的重复数、列上的空值、数据在列上的分布情况;
  95. // 索引的分析-索引页块的数量、索引的深度、索引聚合因子).
  96. // "dbms_stats.GATHER_SCHEMA_stats (" + ParamEnum.DB_SCHEMA.getParamSign() +");\n" +
  97. "SELECT\n" +
  98. "ut.TABLE_NAME " + DbAliasEnum.TABLE_NAME.getAlias() + ",utc.COMMENTS " + DbAliasEnum.TABLE_COMMENT.getAlias() + "\n" +
  99. ",ut.num_rows " + DbAliasEnum.TABLE_SUM.getAlias() + "\n" +
  100. "FROM ALL_TABLES AS ut\n" +
  101. "LEFT JOIN\n" +
  102. "all_tab_comments AS utc\n" +
  103. "ON\n" +
  104. "ut.TABLE_NAME = utc.TABLE_NAME AND ut.OWNER = utc.OWNER\n" +
  105. "WHERE ut.OWNER = " + ParamEnum.DB_SCHEMA.getParamSign() + "\n" +
  106. "ORDER BY F_TABLE_NAME;"
  107. ){
  108. @Override
  109. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  110. list.add(dbStruct.getDmDbSchema());
  111. }
  112. },
  113. TABLESANDVIEW(
  114. // 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,
  115. // 包含该表的自身-表的行数、数据块数、行长等信息;列的分析--列值的重复数、列上的空值、数据在列上的分布情况;
  116. // 索引的分析-索引页块的数量、索引的深度、索引聚合因子).
  117. // "dbms_stats.GATHER_SCHEMA_stats (" + ParamEnum.DB_SCHEMA.getParamSign() +");\n" +
  118. " select\tTABLE_NAME as " + DbAliasEnum.TABLE_NAME.getAlias() +
  119. ",'TABLE' as " + DbAliasEnum.TABLE_TYPE.getAlias() + " from all_tab_comments WHERE owner = " + ParamEnum.DB_NAME.getParamSign() + "\n" +
  120. " UNION\n" +
  121. " select\t view_name as " + DbAliasEnum.TABLE_NAME.getAlias() +
  122. ",'VIEW' as " + DbAliasEnum.TABLE_TYPE.getAlias() + " from all_views WHERE owner = " + ParamEnum.DB_NAME.getParamSign()
  123. // "select atcs.table_name " + DbAliasEnum.TABLE_NAME.getAlias()
  124. // + ",atcs.comments " + DbAliasEnum.TABLE_COMMENT.getAlias()
  125. // + ",atcs.table_type " + DbAliasEnum.TABLE_TYPE.getAlias()
  126. // + "\nfrom all_views alv left join all_tab_comments atcs on alv.owner = atcs.owner where atcs.owner = " + ParamEnum.DB_NAME.getParamSign() + ""
  127. ){
  128. @Override
  129. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  130. list.add(dbStruct.getDmDbSchema());
  131. list.add(dbStruct.getPostGreDbSchema());
  132. }
  133. },
  134. TABLE(
  135. TABLES.sqlFrame.replace("ORDER BY", "AND ut.TABLE_NAME = " + ParamEnum.TABLE.getParamSign() + " ORDER BY")
  136. ){
  137. @Override
  138. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  139. list.add(dbStruct.getDmDbSchema());
  140. list.add(table);
  141. }
  142. },
  143. EXISTS_TABLE(
  144. "SELECT COUNT (*) AS TOTAL FROM (" +
  145. "SELECT\n" +
  146. "ut.TABLE_NAME " + DbAliasEnum.TABLE_NAME.getAlias() + " FROM ALL_TABLES AS ut\n" +
  147. "WHERE ut.OWNER = " + ParamEnum.DB_SCHEMA.getParamSign() +
  148. " and ut.TABLE_NAME = "+ ParamEnum.TABLE.getParamSign()
  149. + ") AS TOTAL"
  150. ){
  151. @Override
  152. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  153. list.add(dbStruct.getDmDbSchema());
  154. list.add(table);
  155. }
  156. },
  157. /* =============================== 定义语句 ==================================== */
  158. // (Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop
  159. /*=============================== ALTER ====================================*/
  160. CREATE_TABLE (
  161. "<CREATE> <TABLE> {table}<(>\n" +
  162. "【{column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] 】" +
  163. "\n{primarykeys}" +
  164. "\n<)>"
  165. ){
  166. @Override
  167. public String createIncrement(String sqlFrame, Map<String, String> paramsMap) {
  168. // 自增标识:IDENTITY(1, 1)
  169. if (StringUtil.isNotEmpty(paramsMap.get("[AUTO_INCREMENT]"))){
  170. sqlFrame = super.createIncrement(sqlFrame, paramsMap)
  171. .replace("{dataType}", "{dataType} IDENTITY(1, 1)");
  172. String openIdentity = OPEN_IDENTITY.sqlFrame
  173. .replace("{table}", paramsMap.get("{table}"))
  174. .replace("<ON|OFF>", "ON");
  175. return sqlFrame + ";\n" + openIdentity;
  176. }
  177. return sqlFrame;
  178. }
  179. @Override
  180. public String createIndex(){
  181. // 添加唯一索引
  182. String createIndex = "CREATE UNIQUE {uniqueName} TO {table}【{column}】";
  183. return null;
  184. }
  185. },
  186. OPEN_IDENTITY("SET IDENTITY_INSERT {table} <ON|OFF>"),
  187. ALTER_DROP("ALTER TABLE 《schema》.{table} DROP COLUMN {column}"),
  188. /**
  189. * 添加字段
  190. */
  191. ALTER_ADD("ALTER TABLE 《schema》.{table} ADD {column} {dataType}"),
  192. /**
  193. * 修改字段
  194. */
  195. ALTER_TYPE("ALTER TABLE 《schema》.{table} <MODIFY> {column} {dataType}"),
  196. /**
  197. * 修改表名
  198. */
  199. ALTER_TABLE_NAME("ALTER TABLE 《schema》.{table} ALTER column {oldColumn} RENAME TO {newColumn};"),
  200. /* =============================== DML操作语句 ==================================== */
  201. // (Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。
  202. DB_TIME_SQL ("select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as TIME "),
  203. INSERT(
  204. "INSERT INTO 《schema》.{table} (【{column},】) VALUES (【{value},】)"
  205. ),
  206. /**
  207. *
  208. */
  209. CREATE_SCHEMA(
  210. "CREATE SCHEMA \"{schema}\";"
  211. ),
  212. DROP_SCHEMA(
  213. "DROP SCHEMA \"{schema}\" RESTRICT"
  214. ),
  215. DROP_TABLE(
  216. SqlPostgreSQLEnum.DROP_TABLE
  217. ),
  218. COMMENT_COLUMN(
  219. SqlPostgreSQLEnum.COMMENT_COLUMN
  220. ),
  221. COMMENT_TABLE(
  222. SqlPostgreSQLEnum.COMMENT_TABLE
  223. ),
  224. CREATE(
  225. SqlPostgreSQLEnum.CREATE
  226. ),
  227. /*=============================== 其他 ====================================*/
  228. ;
  229. private final String dbEncode = DbBase.DM;
  230. private final String sqlFrame;
  231. SqlDMEnum(SqlFrameBase sqlEnum){
  232. this.sqlFrame = sqlEnum.getSqlFrame();
  233. }
  234. }