达梦SQL语法兼容笔记

1. DDL工具语法

查看库和表列表

# 查看所有数据库
select distinct object_name  from all_objects where object_type='SCH';
# 查看所有可见的表名:
SELECT table_name FROM all_tables;
# 查看用户可见的所有表
SELECT table_name FROM all_tables WHERE owner = 'schema_name';
# 查看当前连接的数据库名
SELECT sys_context('USERENV', 'DB_NAME') FROM dual;

查询环境参数:

# 查询字符集
SELECT value FROM v$nls_parameters WHERE parameter = 'NLS_CHARACTERSET';
# 查询达梦超时时间
SELECT profile_name, idle_time/60 AS idle_minutes FROM dmdba.dm_user_profiles WHERE profile_name = 'DEFAULT';
# 查看DM版本
select BUILD_VERSION from SYS.V$INSTANCE;
# 查询关键字
select * from V$RESERVED_WORDS;
# 查询页大小。除大字段外,一条记录大小不能超过一页
select page();
# 是否从服务器中取出大字段数据(disql)
SET LOBCOMPLETE <OFF(缺省值) | ON>

表结构:

# 类似于mysql中的show columns、show create table 语句
describe table_name
# 查询表的创建语句:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'meet_conference', 'pc3') AS CREATE_STATEMENT FROM DUAL;
# 变更表结构:
ALTER TABLE meet_conference ADD (node INTEGER, parentConfId VARCHAR(255));

索引信息:

# 查询某张表的唯一索引
SELECT ui.index_name, uic.column_name FROM user_indexes ui JOIN user_ind_columns uic ON ui.index_name = uic.index_name WHERE ui.table_name = 'webcal_live_info' AND ui.uniqueness = 'UNIQUE';
# 联表查询某个用户的所有索引信息
select cc.*, c.* from dba_constraints c, dba_cons_columns cc where c.constraint_name = cc.constraint_name and c.owner = 'uc_uniform' and cc.table_name = 'uc_uniform';# 查询一个表的所有索引条件信息
select * from dba_constraints where table_name = 'conf_summary';
# 查询一个表的所有索引列字段信息
select * from dba_cons_columns where table_name = 'conf_summary';# 查询一个具体约束包含的列字段
select * from dba_cons_columns where constraint_name = 'CONS134225131';
# 查询一个具体约束的条件信息
select * from dba_constraints where constraint_name = 'CONS134225131';

2. 支持自增列插入值

方法:通过设置数据库参数IDENTITY_INSERT来实现。
示例:

SET IDENTITY_INSERT  ums.tang_ums_product ON WITH REPLACE NULL;   
INSERT INTO ums.tang_ums_product (id, name, url, "type") VALUES ('60000', '云会议', 'MeetNow', '0'); 
SET IDENTITY_INSERT  ums.tang_ums_product OFF;

3. 支持大字段比较

方法:修改数据库参数 ENABLE_BLOB_CMP_FLAG 为 1

ENABLE_BLOB_CMP_FLAG:是否支持大字段类型的比较。

  • 0:不支持;
  • 1:支持。

设置为 1 后支持 DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。

注意:该参数并不能支持 GROUP BY 对大字段进行处理。

4. 标识符的MySQL兼容

达梦中采用双引号来作为定界标识符,用双引号括起来时标识符体可以包含任意字符。定界标识符的例子:"table","A","!@#$"

在兼容 MYSQL 的模式下,定界标识符的标识符体除用双引号括起来外,还支持使用反引号进行定界或关键字的转义。如下面所示:

`TABLE_NAME``test`

MySQL的兼容模式可以通过修改dm.ini中数据库兼容参数解决:

COMPATIBLE_MODE=4

查看下数据库这个兼容性参数param_value的值:

select * from v$dm_ini where para_name='COMPATIBLE_MODE'

对于通过MySQL兼容模式来支持反引号这个功能,只有在8.1.3.37之后的版本中才支持,之前的版本只能去掉或者通过双引号。

5. disql命令行对引号的转义

以一个例子说明,如果密码是"aaaa"“aaaa”,则SQL语句中书写格式如下:
在这里插入图片描述

  • 最外层的三个双引号分别表示,将密码括起来的双引号,转移双引号,实际密码双引号;
  • 中间四个双引号分别表示转移双引号,第一个密码双引号,转移双引号,第二个密码双引号;

disql命令行连接数据的书写格式:
在这里插入图片描述

6. 引号转义规则

  • 如果是单引号,再加个单引号转义,用两个连续单引号转义成单引号
  • 如果是双引号,再加个双引号作转义,正规标识符不会包含双引号,有一种定界标识符可以有双引号(可以包含任意字符)
  • 其它特殊字符的转义与Mysql一致,例如:制表符、反斜杠、换行、回车
  • 单引号用来包裹字符串值(双引号不行),双引号用来包裹标识符,例如:字段名和表名。
  • Mysql的兼容:将’替换成’',将"替换成""
  • java的话,可以在驱动连接串加上?quoteReplace=1这个进行兼容

7. replace into语法转换

Mysql语法示例:

REPLACE INTO exchange_bindinfo (userId,resId,bindingData) 
values (1,"abcd","101003")

达梦语法示例:

MERGE INTO exchange_bindinfo t
USING dual
ON (t.userId = 1 AND t.resId = 'abcd')
WHEN MATCHED THENUPDATE SET t.bindingData = '101003'
WHEN NOT MATCHED THENINSERT (userId, resId, bindingData)VALUES (1, 'abcd', '101003');

8. 联表更新语句转换

Mysql语法

UPDATE TESTB LEFT JOIN TESTA 
ON TESTA.A = TESTB.A 
SET TESTB.B = TESTA.B;

达梦语法:

MERGE INTO TESTB 
USING TESTA 
ON (TESTA.A = TESTB.A)
WHEN MATCHED THEN UPDATE SET TESTB.B = TESTA.B

9. on duplicate key update语句转换

Mysql语法:

insert into webcal_live_info(cal_id,channelId,pullurl,password,extraInfo) values(634311,131722,'https://rlive1uat.rmeet.com.cn/activity/geeZWo3','','{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}') on duplicate key update password='', extraInfo='{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}'

达梦语法:

MERGE INTO webcal_live_info t
USING dual
ON (t.cal_id = 634311 AND t.channelId = 131722)
WHEN MATCHED THENUPDATE SET t.password = '', t.extraInfo = '{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}'
WHEN NOT MATCHED THENINSERT (cal_id, channelId, pullurl, password, extraInfo)VALUES (634311, 131722, NULL, '', '{"liveViewFlag":0,"livePlaybackFlag":0,"livePlaybackTime":0,"jointHostUrl":"https://stest.qsh1.cn/a/GVaZkX26ACE2"}');

10. 多条数据的on duplicate key update

Mysql语法:

INSERT INTO users (username, email, age)
VALUES ('user1', 'user1@example.com', 25),('user2', 'user2@example.com', 30),('user3', 'user3@example.com', 35)
ON DUPLICATE KEY UPDATEemail = VALUES(email),age = VALUES(age);

达梦语法:

MERGE INTO users u
USING (SELECT 'user1' AS username, 'user1@example.com' AS email, 25 AS age FROM dualUNION ALLSELECT 'user2', 'user2@example.com', 30 FROM dualUNION ALLSELECT 'user3', 'user3@example.com', 35 FROM dual
) d
ON (u.username = d.username)
WHEN MATCHED THENUPDATE SET u.email = d.email, u.age = d.age
WHEN NOT MATCHED THENINSERT (username, email, age) VALUES (d.username, d.email, d.age);

参考阅读

  • dm8 password转义:https://eco.dameng.com/community/question/276215ad690cd0310ce60ab368f48c0f
  • 达梦与mysql的引号兼容:https://eco.dameng.com/community/question/45ea31056858e8d877eb6395882e652f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185326.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家用AIO系统架构图(Openwrt 群晖 IPV6 DDNS)

折腾几个月了&#xff0c;摸索出的最合适的系统架构。其余的系统架构也都行得通&#xff0c;但是从逻辑角度&#xff0c;下列方案更加的自然通顺。 系统架构图 疑问解答 为什么用IPV6? 2222年了都不会真有人能从运营商哪里搞到ipv4或者还没有ipv6吧。 光猫为什么桥接? 抠门运…

【LeetCode刷题日志】160.相交链表

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

将对象与返回的数据所对应的键相同时一一赋值

问题描述 对象与返回的数据直接赋值&#xff0c;会将多余的键与值也添加上 那么赋值时值要 目标对象的键所对应的值 解决方案&#xff1a; 利用双重遍历 来比对 当 键相同时再赋值 duiYingFuZhi(obj,data){for (let key in obj) {for (let index in data) {if (keyindex) {obj…

【第2章 Node.js基础】2.1 JavaScript基本语法

文章目录 学习目标JavaScript版本与JavaScript运行环境JavaScript版本JavaScript运行环境 JavaScript语句与注释语句语句块注释 变量变量的命名变量的声明与赋值变量提升变量泄露全局作用域和函数作用域块级作用域与let关键字使用const关键字声明只读常量注意 数据类型数值&…

uniapp:打包ios配置隐私协议框

使用uniapp打包ios 上架商店需要配置隐私协议政策弹窗。当用户点击确定后才能继续操作。 首先manifest.json中配置使用原生隐私政策提示框是不支持ios的。不用勾选。 解决思路&#xff1a; 1、新建页面&#xff1a;iosLogin.vue&#xff0c;pages.json中 这个页面需要放在第一…

HiSilicon352 android9.0 适配红外遥控器

海思Android解决方案在原生Android基础上&#xff0c;基于传统电视用户使用习惯&#xff0c;增加了对红外遥控器和按键板的支持&#xff0c;使传统电视用户能更好适应智能电视方案。 一.功能描述&#xff1a; 在系统启动时&#xff0c;会先启动android_ir_user&#xff1b;vinp…

游戏平台采集数据

首先&#xff0c;你需要在你的项目中添加Kotlin的网络库&#xff0c;例如OkHttp。你可以在你的build.gradle文件中添加以下依赖&#xff1a; dependencies {implementation com.squareup.okhttp3:okhttp:4.9.0 }然后&#xff0c;你可以使用以下代码来创建一个基本的网络爬虫&a…

基于袋獾算法的无人机航迹规划-附代码

基于袋獾算法的无人机航迹规划 文章目录 基于袋獾算法的无人机航迹规划1.袋獾搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用袋獾算法来优化无人机航迹规划。 1.袋獾搜索算法 …

pandas笔记:读写excel

1 读excel read_excel函数能够读取的格式包含&#xff1a;xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件扩展名。 支持读取单一sheet或几个sheet。 1.0 使用的数据 1.1 主要使用方法 pandas.read_excel(io, sheet_name0, header0, namesNone, index_colNone, usecolsNon…

康耐视VisionPro 9.0 R2破解安装教程

文章目录 说明下载安装VisionPro破解匹配的Visual Studion将VisionPro的控件添加到VS工具箱中 说明 康耐视VisionPro 9.0 R2 破解版仅用于个人学习使用&#xff0c;如企业中需要请自行购买正版哦。 下载 百度网盘链接&#xff1a;https://pan.baidu.com/s/1rreSzpe8r2Gz8qSp…

目标检测标注的时代已经过去了?

在快速发展的机器学习领域&#xff0c;有一个方面一直保持不变&#xff1a;繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割&#xff0c;长期以来人工标记的数据集一直是监督学习的基础。 然而&#xff0c;由于一个创新性的工具 AutoDistill&#xff0c;这…

【排序算法】 快速排序(快排)!图解+实现详解!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 算法—排序篇 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️快速排序的概念☁️快速排序的由来☁️快速排序的思想☁️快速排序的实…

代码解释【待解决】

这里写目录标题 代码解释数组转化为列表&#xff0c;方便在哪里yeildrange()函数还有一些常用的小技巧。在这里我们列举两个常用技巧&#xff0c;以供参考梯度l.sum().backward()的粗浅理解detatch文字描述在默认情况下&#xff0c;PyTorch会累积梯度&#xff0c;我们需要清除之…

跨足泛娱乐:TikTok如何重新定义娱乐产业?

在当今数字时代&#xff0c;社交媒体已成为人们生活中不可或缺的一部分。它们不仅是人们互相分享生活、观点和见解的平台&#xff0c;还在娱乐产业中发挥着越来越重要的作用。 TikTok&#xff0c;作为一款短视频分享应用&#xff0c;已经在全球范围内引起轰动&#xff0c;重新…

CCF-CSP真题《202309-3 梯度求解》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-3试题名称&#xff1a;梯度求解时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 背景 西西艾弗岛运营公司近期在大力推广智能化市政管理系…

Verilog刷题[hdlbits] :Always if

题目&#xff1a;Always if An if statement usually creates a 2-to-1 multiplexer, selecting one input if the condition is true, and the other input if the condition is false. if语句通常创建一个2- to -1多路复用器&#xff0c;如果条件为真&#xff0c;则选择其中…

关于unity中 编辑器相关逻辑的记录

prefab 在场景中 , 用这个方法可以获取它的磁盘路径: [MenuItem("Gq_Tools/↓获取prefab路径")] public static void SaveDecalParameters() { var objs Selection.objects; var obj objs[0] as GameObject; Object parentObject Prefab…

Stable Diffusion:最先进的文本生成图像模型

稳定扩散 生成式 AI 技术正在迅速发展&#xff0c;现在可以简单地根据文本输入生成文本和图像。Stable Diffusion 是一种文本到图像模型&#xff0c;使您能够创建逼真的应用程序。 扩散模型通过学习去除添加到真实图像中的噪声进行训练。这种降噪过程会产生逼真的图像。这些模…

[LeetCode]-138. 随机链表的复制

目录 题目 解题步骤 1.拷贝节点插入原节点的后面 2.置每个拷贝节点random 3.拷贝节点解下来&#xff0c;尾插到一起&#xff0c;恢复原链表 完整代码 题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表…

异常断电文件损坏docker服务异常处理

问题场景 我们在某地部署信控平台&#xff0c;当初是在产品研发早期&#xff0c;采取的还是Windows服务器部署虚拟机的方式使用virtualbox导入centos7虚拟机&#xff0c;虚拟机里运行docker服务&#xff0c;使用docker-compose统一管理客户今天上午反馈&#xff0c;昨天断电了…