批量生成建表语句工具

已知表名称和字段信息。需要生成建表的SQL语句。如果有一张表还好,手动写下SQL语句没问题,但是如果有20张表,再手动写SQL效率就不高,而且手动容易写错。

使用下面的小工具就可以批量生成建表的SQL,支持多张表一键生成。此工具以oracle数据库为例,其他数据库可以修改后使用。

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>

</head>
<body>
    <h1 style="text-align:center;">批量生成建表语句工具</h1>
    <h3>将表名称信息放入"表名称文本域",将字段信息放入"表字段文本域"中,点击解析按钮.</h3>
    <h3>"表名称文本域",放2列数据,如'<span style="color:red;">员工信息表	MID_HR_PERSON</span>',第一列为表中文名称,用于和字段循环时比对;第二列是表名称.</h3>
	<h3>"表字段文本域",放4列数据,如'<span style="color:red;">员工信息表	生效日期	FEFFDT	日期类型</span>',第一列为表中文名称,用于和表名称循环时比对;第二列数据是字段中文名称;第三列是字段名称;第四列是表字段类型.</h3>
	<h3>数据放入对应文本域后注意将最后一行的回车删掉</h3>
    <div style="float:left;">
	    <h2>表名称文本:</h2>
		<textarea id="TableNameText" rows="15" style="width:500px"></textarea>

		<h2>表字段文本</h2>
		<textarea id="AnswerText" rows="15" style="width:500px"></textarea>
		<button id="BtnNow" style="width:50px;height:50px;">解析</button>
		<br />
	</div>
   
    <div>
		<h2>解析后文本</h2>
		<textarea id="AnswerAnalysis" rows="40" style="width:500px"></textarea>
	</div>

    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
        $("#BtnNow").on("click", function () {
            //表名称信息
			var _tblNameText = $("#TableNameText").val();
			var vArrTblName = _tblNameText.split("\n");//按行拆分表名称信息

			//字段信息
            var _answerText = $("#AnswerText").val();

		    var vHtml ="";
     
			for (var k = 0; k < vArrTblName.length; k++) {
				var vNameTblRow = vArrTblName[k];//表名称单行数据
				var vNameRowArr = vNameTblRow.split("\t");//按空格拆分

				var tableCnName= vNameRowArr[0];//表中文名称
				var tableName= vNameRowArr[1];//表英文名称

				vHtml += "create table "+tableName +"\n (";
				vHtml += " ID NUMBER NOT NULL, \n";

				var vArr = _answerText.split("\n");//按行拆分表字段信息
				if (_answerText != "") {
					
					//console.log(vArr);

					//开始循环字段信息
					for (var i = 0; i < vArr.length; i++) {
						var v1 = vArr[i];
						var vArr1 = v1.split("\t");//按空格拆分

                        var tblName=vArr1[0];//表中文名
						var fileName=vArr1[2];//字段名称
						var dataType=vArr1[3];//数据类型 (字符串类型 日期类型 数字类型)
                         
						if(tableCnName==tblName){//是同一张表的信息
							if(dataType=="字符串类型"){
								    vHtml += fileName+" VARCHAR2(2000), \n";
							}else if(dataType=="日期类型"){
									vHtml += fileName+" DATE, \n";
							}else if(dataType=="数字类型"){
									vHtml += fileName+" NUMBER, \n";
							}else{
									vHtml += fileName+ " "+dataType +", \n";//如果是写明字段类型的直接取
							}
						}
					}

					//通用字段添加
					vHtml += "CORPNO VARCHAR2(2000),\n"; 
					vHtml += "SOURCECORPNO VARCHAR2(2000),\n"; 
					vHtml += "RESOURCE_SIGN VARCHAR2(50),\n"; 
					vHtml += "RESOURCE_ID VARCHAR2(50),\n"; 
					vHtml += "SYNC_DATE DATE,\n"; 
					vHtml += "SYNC_STATUS NUMBER,\n";  
					vHtml += "IS_COMPARE NUMBER,\n"; 
					vHtml += "ABNORMAL_HINTS VARCHAR2(4000),\n"; 
					vHtml += "ABNORMAL_REMIND VARCHAR2(4000),\n"; 
					vHtml += "CREATE_USERNAME VARCHAR2(2000),\n"; 
					vHtml += "CREATE_DATE DATE,\n"; 
					vHtml += "OPERATE_USERNAME VARCHAR2(2000),\n"; 
					vHtml += "OPERATE_DATE DATE,\n"; 
					vHtml += "OPERATE_TYPE VARCHAR2(2000),\n"; 
					vHtml += "AUDIT_USER VARCHAR2(2000),\n"; 
					vHtml += "AUDIT_DATE DATE,\n"; 
					vHtml += "CANCEL_DATE DATE);\n"; 

					vHtml += "\n";

					vHtml += "comment on table "+tableName + " is '" +tableCnName+"';\n";
					vHtml += "comment on column "+tableName + ".ID is '主键ID';\n";

					//开始循环字段注释信息
					for (var i = 0; i < vArr.length; i++) {
						var v1 = vArr[i];
						var vArr1 = v1.split("\t");//按空格拆分

						var tblName=vArr1[0];//表中文名,用于和外层循环StdTableName的值判断
						var cnName=vArr1[1];//字段中文名
						var fileName=vArr1[2];//字段名称

						if(tableCnName==tblName){//是同一张表的信息
						   vHtml += "comment on column "+tableName + "."+fileName+" is '" +cnName+"';\n";
						}
					}
					 
					//通用字段添加备注
					vHtml += "comment on column "+tableName+".CORPNO is '企业编码';\n";
					vHtml += "comment on column "+tableName+".SOURCECORPNO is '数据来源单位';\n";
					vHtml += "comment on column "+tableName+".RESOURCE_SIGN is '数据源标志';\n";
					vHtml += "comment on column "+tableName+".RESOURCE_ID is '数据源ID';\n";
					vHtml += "comment on column "+tableName+".SYNC_DATE is '同步日期';\n";
					vHtml += "comment on column "+tableName+".SYNC_STATUS is '同步状态(1-未比对/2-异常数据/5-撤销/7-已入库)';\n";
					vHtml += "comment on column "+tableName+".IS_COMPARE is '是否比对入库(0-未比对/1-已比对)';\n";
					vHtml += "comment on column "+tableName+".ABNORMAL_HINTS is '错误提示';\n";
					vHtml += "comment on column "+tableName+".ABNORMAL_REMIND is '非必要级告警提醒';\n";
					vHtml += "comment on column "+tableName+".CREATE_USERNAME is '创建人';\n";
					vHtml += "comment on column "+tableName+".CREATE_DATE is '创建日期';\n";
					vHtml += "comment on column "+tableName+".OPERATE_USERNAME is '操作人';\n";
					vHtml += "comment on column "+tableName+".OPERATE_DATE is '操作日期';\n";
					vHtml += "comment on column "+tableName+".OPERATE_TYPE is '操作类型';\n";
					vHtml += "comment on column "+tableName+".AUDIT_USER is '审核人';\n";
					vHtml += "comment on column "+tableName+".AUDIT_DATE is '审核日期';\n";
					vHtml += "comment on column "+tableName+".CANCEL_DATE is '撤销日期';\n";

					//为表添加主键
					vHtml += "\n";
					vHtml += "alter table "+tableName + " add constraint PK_" +tableName+" primary key (ID) using index;";

                    vHtml += "\n\n\n\n";//单张表结束

				}
			}//表名称循环结束

			$("#AnswerAnalysis").html(vHtml);
			
        });

    </script>
</body>
</html>

使用方法:

1.将上面代码拷贝到TXT文本中,将文件后缀改为html格式。在浏览器中打开,可以看到如下内容:

2.根据文字提示将对应信息放入对应文本框中,点击页面中的解析按钮,就可以生成对应表的创建语句。

 

工具的脚本是用js写的,可以根据实际应用场景修改。
代码中有一段逻辑是为表添加通用字段,就是每张表都有的字段,如果不需要则可以删除。

代码逻辑是两层for循环,外层循环表名称中的文本信息,内层循环字段信息,如果表名称中的表名和字段信息中的表名相同,则说明是同一张表,生成表的语句。然后再继续循环,直到把所有表循环完毕。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤将MySQL转换为Hive生成建表语句: 1. 在MySQL中运行SHOW CREATE TABLE语句,以获取MySQL建表语句。 2. 将建表语句中的引擎和字符集替换为Hive支持的引擎和字符集。 3. 将建表语句中的数据类型替换为Hive支持的数据类型。 4. 将建表语句中的AUTO_INCREMENT删除,因为Hive不支持自增长。 5. 将建表语句中的主键和索引删除,因为Hive不支持主键和索引。 6. 将建表语句中的分隔符替换为Hive支持的分隔符。 7. 生成Hive建表语句并保存到文件中。 下面是一个示例Python脚本,可以将MySQL转换为Hive生成建表语句: ```python import re def convert_mysql_to_hive(mysql_create_table): # Replace engine and character set hive_create_table = mysql_create_table.replace('ENGINE=InnoDB', '') hive_create_table = hive_create_table.replace('DEFAULT CHARSET=utf8', 'ROW FORMAT DELIMITED FIELDS TERMINATED BY \',\'') # Replace data types hive_create_table = re.sub(r'int\(\d+\)', 'int', hive_create_table) hive_create_table = re.sub(r'varchar\(\d+\)', 'string', hive_create_table) hive_create_table = re.sub(r'text', 'string', hive_create_table) hive_create_table = re.sub(r'datetime', 'timestamp', hive_create_table) # Remove auto increment hive_create_table = re.sub(r'AUTO_INCREMENT=\d+ ', '', hive_create_table) # Remove primary key and indexes hive_create_table = re.sub(r',\n\s+PRIMARY KEY \(.+?\)', '', hive_create_table) hive_create_table = re.sub(r',\n\s+KEY .+? \(.+?\)', '', hive_create_table) # Replace delimiter hive_create_table = hive_create_table.replace(';', '\n') return hive_create_table # Example usage mysql_create_table = "SHOW CREATE TABLE mytable" hive_create_table = convert_mysql_to_hive(mysql_create_table) with open('hive_create_table.sql', 'w') as f: f.write(hive_create_table) ``` 你需要将`mysql_create_table`替换为你的MySQL建表语句,并将生成的Hive建表语句保存到`hive_create_table.sql`文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值