手记 SQL Server迁移到DM8

SQL Server函数与存储过程迁移到达梦


前言

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。


数据类型

SQL SERVER类别描述
NtextNCLOB最多为 2^30–1Unicode 字符
nVarChar(max)nVarChar最多为 2^31–1 字符
moneydecimal(19,4)固定精度:19,标度:4
smallmoneydecimal(19,4)固定精度:19,标度:4
Varbinary(max)BLOB最多为 2^31–1十六进制数字
TimestampBinary(8)时间戳类型,返回一个二进制类型,非时间类型
UniqueidentifierVarchar(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值