达梦数据库(建表、启动脚本、卸载脚本、加载方式、中文乱码问题解决)
背景
项目中用到达梦数据库,编写建表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管理工具中的注释中文正常
更多推荐
所有评论(0)