背景

项目中用到达梦数据库,编写建表sql语句,在添加字段注释时,在命令行的时候中文显示正常,但是用DM管理工具打开时,中文乱码。
本文的主要内容是:
1,建表
2,创建启动脚本
3,创建卸载脚本
4,如何执行脚本
5,中文乱码问题解决

一 建表

1,流程
在这里插入图片描述
因为本次加了启动脚本,因此将模式判断放在了启动脚本中,这样每张表的sql就不用再判断模式了。
2,sql语句

-- 2. 判断表 DJZH 是否存在,存在则删除
DECLARE
    v_cnt INT;
BEGIN
    SELECT COUNT(*) INTO v_cnt 
    FROM SYS.ALL_TABLES 
    WHERE TABLE_NAME = 'TEST' AND OWNER = 'MOSHI';

    IF v_cnt > 0 THEN
        EXECUTE IMMEDIATE 'DROP TABLE MOSHI.TEST';
    END IF;
END;
/
-- 创建 TEST 表
CREATE TABLE TEST(
	VID	VARCHAR(36) NOT NULL,
	PARA1	INT DEFAULT 1 NOT NULL,
	PARA2   VARCHAR(100),
	KJ		DOUBLE,
    CJSJ	TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    GXSJ 	TIMESTAMP,
    PRIMARY KEY (VID)
);

CREATE INDEX idx_PARA1 ON TEST(PARA1);
CREATE INDEX IDX_PARA1_PARA2 ON TEST(PARA1, PARA2);

注:
1)TEST替换为需要创建的表名,MOSHI替换为表所在的模式名,建议用查找-替换所有,一个一个的替换可能出问题
2)在{ }中添加字段,可以设置默认值(DEFAULT),是否为空(NOT NULL)
3)创建主键PRIMARY KEY (VID)
4)创建索引CREATE INDEX idx_PARA1 ON TEST(PARA1);
5)END后的“/”在disql运行时,不能省略,在 disql 里,这种 DECLARE … BEGIN … END; 语句块必须用 / 单独一行来结束执行,否则 disql 会一直当作“还没结束的块”,直到读到文件结尾才报:

二 创建启动脚本

1,启动脚本的作用:将所有表的sql文件按照一定的顺序进行创建,不用在一个个的去启动表。
2,原则:先创建基础表→创建关联表,若是启动时,报错,则优先排查表的关联关系
3,sql 语句:

-- 1. 判断模式是否存在,不存在则创建
DECLARE
    v_cnt INT;
BEGIN
    SELECT COUNT(*) INTO v_cnt 
    FROM SYS.SYSOBJECTS 
    WHERE NAME = 'MOSHI' AND TYPE$ = 'SCH';

    IF v_cnt = 0 THEN
        EXECUTE IMMEDIATE 'CREATE SCHEMA MOSHI';
    END IF;
END;
/


-- 设置模式名
SET SCHEMA MOSHI;


-- 添加需要启动的sql脚本
--	创建基础表
@@BASETABLE1.sql
@@BASETABLE2.sql
-- 创建依赖表
@@GUANLIANTABLE1.sql
@@GUANLIANTABLE2.sql


-- 结束
-- EXIT;

是不是很简单?反正我刚接触时,觉得很神秘~

三 创建卸载脚本

1,流程:先设置模式→删除关联表→删除基础表
2,sql语句

-- 设置模式
SET SCHEMA MOSHI;


-- 先删除关联表
DROP TABLE IF EXISTS TABLE1;
DROP TABLE IF EXISTS TABLE2;

-- 然后删除其他可能依赖的表
DROP TABLE IF EXISTS TABLE3;


-- 删除基础表
DROP TABLE IF EXISTS TABLE4;
DROP TABLE IF EXISTS TABLE5;
DROP TABLE IF EXISTS TABLE6;

-- 删除模式
-- DROP SCHEMA WRGHDB;

注:
1,删除模式无法成功,一直保存,暂未解决,不过好像也不需要解决,因为核心都在表中,表没了,其他都不重要。

四 如何执行启动脚本和卸载脚本

数据表初始化
Windows下:
打开disql命令行(可以将disql加入到系统环境变量,将可执行程序添加到系统环境 变量,就可以直接在cmd使用,而不用每次都定位到 该exe所在的文件夹,如达梦数据库的disql指令)
a) 定位到达梦数据库安装路径,如E:\soft\dmdbms\bin
b) 打开命令行窗口,可以在路径处输入cmd,回车,打开命令行窗口
c) 在命令行窗口输入disql,回车,根据提示输入用户名和密码
d) 进入sql命令格式,如下图所示
在这里插入图片描述

运行启动脚本和卸载脚本
在命令行窗口(sql命令格式)输入以下代码

start C:\Users\23074\Desktop\temp\start.sql

回车,会出现如下图所示
在这里插入图片描述
如果每张表都是操作已执行(如下图所示),则说明建表成功,可以通过dm管理工具或者相关指令查看所建的表。
在这里插入图片描述

五 中文乱码问题解决

windows系统下

由于时间比较长,我简单说一下乱码原因。之所以在命令行运行正常,用DM管理工具打开之后就乱码,这是因为两者的编码方式不一致,DM管理工具支持的UTF-8, 而命令行默认的是GB2312。
在经过充分资料查阅和测试的基础上,有以下解决办法,请按顺序执行:
1,将每个sql文件(包括启动脚本、卸载脚本、各类表)用notepad++打开,设置编码格式为UTF-8,,无bom
2,在启动脚本中,设置编码格式为UTF-8,需要放在第一行,如下所示:

SET CHAR_CODE UTF8;			-- first line
-- 设置模式名
SET SCHEMA TEST;
...

再次运行,即可发现,命令行乱码,但是DM管理工具中的注释中文正常

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐