前言
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。
数据类型
SQL SERVER | 类别 | 描述 |
---|---|---|
Ntext | NCLOB | 最多为 2^30–1Unicode 字符 |
nVarChar(max) | nVarChar | 最多为 2^31–1 字符 |
money | decimal(19,4) | 固定精度:19,标度:4 |
smallmoney | decimal(19,4) | 固定精度:19,标度:4 |
Varbinary(max) | BLOB | 最多为 2^31–1十六进制数字 |
Timestamp | Binary(8) | 时间戳类型,返回一个二进制类型,非时间类型 |
Uniqueidentifier | Varchar(36) | 全局唯一标识符(Globally Unique Identifier,GUID) |
其它数据类型基本没有区别
常用函数
to_char(datetime,‘dd’)获取天时,返回值小于10的天数会自动补零,比如:2022-3-9,获取的返回值是‘09’
SQL Server 的NEWID()函数可以在DM8直接使用,都是生成36位的字符串
改造
变量名
DM8 中@开头的字符不是合法的标识符,将’@‘替换成’v_’
结构
- DM8每条语句的结尾需加上;
- 变量的定义写在BEGIN…END外
语法
- 调用表、视图、函数或存储过程需要加上模式名
- 变量名赋值使用set
- 函数或存储过程定义返回值
- 字符串之间使用‘ || ’连接
- IF语法结构
IF 条件 THEN
......
END IF;
IF 条件 THEN
......
ELSE
......
END IF;
- WHESE语法修改
--第一种
while 条件
begin
......
end;
改成后
while 条件 LOOP
......
end LOOP;
--第二种,游标循环
DECLARE c CURSOR FOR (
......
)
OPEN c
DECLARE v_bookid nVarChar(20)
DECLARE v_ceshu INT
FETCH c INTO v_bookid,v_ceshu
WHILE @@FETCH_STATUS=0
BEGIN
......
FETCH c INTO v_bookid,v_ceshu
END
CLOSE c
DEALLOCATE c
改造后
DECLARE c CURSOR FOR (
......
)
OPEN c;
DECLARE v_bookid nVarChar(20);
DECLARE v_ceshu INT;
FETCH c INTO v_bookid,v_ceshu;
LOOP
......
FETCH c INTO v_bookid,v_ceshu;
Exit when c%notfound;
END LOOP;
CLOSE c;
- select语句赋值和取别名
--第一种,给变量赋值
SELECT SUM(isnull(ShiYang,0)),SUM(ISNULL(MoRenShiYang,0))
INTO v_zongshiyang ,v_morenshiyang
FROM "CHUBAN3".chy_TuiHuo_MingXi
where DanJuBianHao=v_danjubianhao;
--第二种, 取别名
SELECT
GETDATE(), mx.BOOKID, '系统'as CaoZuoYuan, mx.CeShu, dj.DanWeiBianHao,GETDATE(),
mx.DingJia, null as JinHuoDanWei, v_JinHuoDanWeiMingCheng
GETDATE(), NEWID() as Record_GUID
FROM xsh_KeHu_FaHuo_DanJu AS dj
,xsh_kehu_fahuo_mingxi AS mx
- 执行DDL语句,需要使用execute IMMEDIATE,所有语句的执行都可以使用execute IMMEDIATE
- 存储过程里面调用其它存储过程,CALL
- 获取上一条语句印象的行数:sql%ROWCOUNT
- 存储过程中,return 不能带有返回值,需要返回值要在输入参数定义变量
- 异常抛出DM8提供两种RAISE_APPLICATION_ERROR,RAISE
- 存储过程定义临时表,需要先创建定义临时表的存储过程,然后在其它存储过程中引用该存储过程
- 达梦数据库默认是手动提交
后记
如果文中那里有误,欢迎指出,大家共同交流进步!
达梦技术社区 https://eco.dameng.com