DM COMPATIBLE_MODE=2兼容Oracle简介

这篇具有很好参考价值的文章主要介绍了DM COMPATIBLE_MODE=2兼容Oracle简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章节主要介绍 DM 兼容 ORACLE 时的兼容策略。

1.1 空串与 NULL

DM 区分空串与 NULL,但 ORACLE 不区分,ORACLE 中只有 NULL 的概念,因此兼容ORACLE 时,DM 在以下几种情形中对空串与 NULL 进行了兼容处理:

--查询结果为空串

--输出函数打印 NULL

--加载值为空串的字符串变量/参数

--为字符串变量/参数赋值空串

--空串与 NULL 串联

1.1.1 查询结果为空串

兼容 ORACLE 后,当查询结果为空串时显示为 NULL;若不兼容,则显示为空。

示例:

COMPATIBLE_MODE=0,准备如下测试表。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C VARCHAR(10));

SQL> INSERT INTO TEST VALUES('');

SQL> COMMIT;

COMPATIBLE_MODE=2,当查询结果为空串时显示为 NULL。

SQL> SELECT * FROM TEST;

---------- ----

1 NULL

COMPATIBLE_MODE=0,当查询结果为空串时显示为空。

SQL> SELECT * FROM TEST;

---------- ----

1

1.1.2 输出函数打印 NULL

兼容 ORACLE 后,输出函数打印的值为 NULL 时打印为空;若不兼容,则打印为 NULL。

示例:

COMPATIBLE_MODE=2,输出函数打印的值为 NULL 时打印为空。

SQL> SET SERVEROUTPUT ON;

SQL> DECLARE

2 A INT;

3 BEGIN

4 A:=NULL;

5 PRINT A;

6 END;

7 /

DMSQL 过程已成功完成

COMPATIBLE_MODE=0,输出函数打印的值为 NULL 时打印为 NULL。

SQL> SET SERVEROUTPUT ON;

SQL> DECLARE

2 A INT;

3 BEGIN

4 A:=NULL;

5 PRINT A;

6 END;

7 /

NULL

1.1.3 加载值为空串的字符串变量/参数

兼容 ORACLE 后,加载字符串变量/参数时,若字符串为空串则强制转换为 NULL;若不兼容,则不进行转换。

示例:

COMPATIBLE_MODE=0,准备如下测试表。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C VARCHAR(10));

SQL> INSERT INTO TEST VALUES('');

SQL> COMMIT;

COMPATIBLE_MODE=2,执行 DECODE 函数加载参数 C 时,将空串强制转换为 NULL进行相应计算。

SQL> SELECT DECODE(C,NULL,10,20) FROM TEST;

行号 DECODE(C,NULL,10,20)

---------- --------------------

1 10

COMPATIBLE_MODE=0,执行 DECODE 函数加载参数 C 时,不将空串转换为 NULL。

SQL> SELECT DECODE(C,NULL,10,20) FROM TEST;

行号 DECODE(C,NULL,10,20)

---------- --------------------

1 20

1.1.4 为字符串变量/参数赋值空串

兼容 ORACLE 后,为字符串变量/参数赋值空串时,将空串强制转换为 NULL;若不兼容,则不进行转换。

示例:

COMPATIBLE_MODE=2,创建测试表,并在测试表中插入空串。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C VARCHAR(5));

SQL> INSERT INTO TEST VALUES('');

SQL> COMMIT;

由于 ORACLE 不区分空串和 NULL,因此无论是直接插入空串,还是将空串转换为 NULL

之后进行插入,查询结果都将为 NULL(具体请参见 1.1.1 查询结果为空串),无法判断

究竟插入的是空串还是 NULL,而 DM 区分空串和 NULL,因此将 COMPATIBLE_MODE 重新

设置为 0,重新启动 DM 数据库,查询测试表中数据,可以看到测试表中插入的数据为 NULL而非空串。

SQL> SELECT * FROM TEST;

---------- ----

1          NULL

COMPATIBLE_MODE=0,创建测试表,并在测试表中插入空串,查询测试表中数据,

可以看到测试表中插入的数据为空串。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C VARCHAR(5));

SQL> INSERT INTO TEST VALUES('');

SQL> SELECT * FROM TEST;

---------- ----

1

1.1.5 空串与 NULL 串联

兼容 ORACLE 后,空串与 NULL 串联,返回 NULL;若不兼容,则返回空串。

示例:

COMPATIBLE_MODE=2,空串与 NULL 串联,返回 NULL。

SQL> SELECT NULL||'';

行号 NULL||''

---------- --------

1       NULL

COMPATIBLE_MODE=0,空串与 NULL 串联,返回空串。

SQL> SELECT NULL||'';

行号 NULL||''

---------- --------

1

1.2 字符串反转策略

兼容 ORACLE 后,按字节反转字符串;若不兼容,则按字符反转字符串。

示例:

COMPATIBLE_MODE=2,ORACLE 按字节反转字符串。使用的字符集编码不同,查询结

果可能不同,当字符集编码为 GB18030 时,查询结果如下:

SQL> SELECT REVERSE('达梦');

行号 "REVERSE"('达梦')

---------- -----------------

1 蚊锎

COMPATIBLE_MODE=0,DM 按字符反转字符串。

SQL> SELECT REVERSE('达梦');

行号 "REVERSE"('达梦')

---------- -----------------

1 梦达

1.3 定义 DATE 类型

兼容 ORACLE 后,定义 DATE 类型时,将 DATE 类型强制转换为 DATETIME 类型;若

不兼容,则不进行转换。

示例:

COMPATIBLE_MODE=2,定义 DATE 类型时,将 DATE 类型强制转换为 DATETIME 类型。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C DATE);

SQL> INSERT INTO TEST VALUES(SYSDATE);

SQL> SELECT * FROM TEST;

---------- -------------------

1 2021-03-02 09:28:02

COMPATIBLE_MODE=0,定义 DATE 类型时不会转换为 DATETIME 类型。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C DATE);

SQL> INSERT INTO TEST VALUES(SYSDATE);

SQL> SELECT * FROM TEST;

---------- ----------

1 2021-03-02

1.4 插入字符串结尾空格超长

兼容 ORACLE 后,插入字符串结尾空格超长时,报错;若不兼容,则对超长字符串结

尾空格进行截断,使插入字符串长度为定义长度。

示例:

准备如下测试表。

SQL> DROP TABLE TEST;

SQL> CREATE TABLE TEST(C VARCHAR(3));

SQL> COMMIT;

COMPATIBLE_MODE=2,插入字符串结尾空格超长,报错。

SQL> INSERT INTO TEST VALUES('ABC ');

[-6169]:列[C]长度超出定义.

 COMPATIBLE_MODE=0,插入字符串结尾空格超长,截断结尾空格,使插入的字符串

长度为定义长度 3。

SQL> INSERT INTO TEST VALUES('ABC ');

SQL> SELECT * FROM TEST;

---------- ---

1 ABC

1.5 DEC 类型转为字符串

兼容 ORACLE 后,DEC 类型数据转换为字符串时,转换结果小数点右侧结尾不补 0;若不兼容,则结尾补 0。

示例:

COMPATIBLE_MODE=2,DEC 类型数据 CAST(1.30000 AS DEC(13,5))转换为字符串时,转换结果小数点右侧结尾不补 0。

SQL> SELECT CAST(1.30000 AS DEC(13,5))||'-'||1.322323 FROM DUAL;

行号 CAST(1.3ASDEC(13,5))||'-'||1.322323

---------- --------------------------------------

1 1.3-1.322323

COMPATIBLE_MODE=0,DEC 类型数据 CAST(1.30000 AS DEC(13,5))转换为字

符串时,转换结果小数点右侧结尾补 0。

SQL> SELECT CAST(1.3 AS DEC(13,5))||'-'||1.322323;

行号 CAST(1.3ASDEC(13,5))||'-'||1.322323

---------- --------------------------------------

1 1.30000-1.322323

达梦社区地址:https://eco.dameng.com文章来源地址https://www.toymoban.com/news/detail-446740.html

到了这里,关于DM COMPATIBLE_MODE=2兼容Oracle简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lightdb 支持兼容Oracle的to_clob函数

    在信创移植的SQL语句中,有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中,你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了对TO_CLOB函数的支持。 环境准备 使用TO_CLOB函数 可以看出,在Oracle兼容模式下

    2024年02月10日
    浏览(42)
  • 04 DC-DC变换器(DCDC Converter / Switched-mode Power Supply)简介

    针对B站视频,截取ppt做的完整笔记,视频地址附在下方 0、DC-DC变换器概述 简述 DC-DC变换器是指能将一种直流输入电压(或电流)变换成另一等级直流输出电压(或电流)的装置。 1)移动电子设备供电(DC/DC开关电源 LDO低压差线性电源) 2)高效LED电源 3)功率优化器(光伏

    2023年04月27日
    浏览(39)
  • 阿里云PolarDB自研数据库详细介绍_兼容MySQL、PostgreSQL和Oracle语法

    阿里云PolarDB数据库是阿里巴巴自研的关系型分布式云原生数据库,PolarDB兼容三种数据库引擎:MySQL、PostgreSQL、Oracle(语法兼容),目前提供云原生数据库PolarDB MySQL版、云原生数据库PolarDB PostgreSQL版和云原生数据库PolarDB分布式版,阿里云百科aliyunbaike.com分享阿里云PolarDB数据

    2024年02月07日
    浏览(56)
  • LightDB ecpg 支持 exec sql execute ... end-exec【24.1】【oracle 兼容】

    LightDB 从24.1 版本开始支持 oracle pro*c 中执行匿名块的语法(之前可以通过do 语句执行匿名块): 因为匿名块不是SQL标准的一部分,所以此用法也不存在于SQL标准中。 需要注意的是由于内部实现方式的原因,在匿名块中不能使用 $AnonBlockStmt$ ,示例如下:

    2024年03月14日
    浏览(53)
  • Oracle之 第1篇 Oracle 11g 简介

    目录 Oracle之 第1篇   Oracle 11g 简介 1.1  Oracle概述 1.2  Oracle 11g 系统的体系结构★ 1.1 Oracle物理结构 1.1物理结构--数据文件 1.1.2 物理结构---日志文件 1.1.3 物理结构---控制文件 1.2.4  配置文件 常用 Oracle 服务   (上机时需要启动三个服务) 常用 Oracle 服务(重点) OracleServiceO

    2024年01月23日
    浏览(47)
  • Oracle数据库概念简介

    一般意义上的数据库包含两个部分 库:就是一个存储一堆文件的文件目录 数据库管理系统:管理库的系统 数据库管理系统(Database Management System),是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS ; 它对数据库进行统一的管理和控制,以保证数

    2024年02月09日
    浏览(49)
  • Oracle 简介与 Docker Compose部署

    最近,我翻阅了在之前公司工作时的笔记,偶然发现了一些有关数据库的记录。当初,我们的项目一开始采用的是 Oracle 数据库,但随着项目需求的变化,我们不得不转向使用 SQL Server。值得一提的是,公司之前采用的是 Docker 技术,所有数据库的部署都是通过 Docker Compose 来完

    2024年02月06日
    浏览(47)
  • Docker[1] Docke环境是什么 安装部署 依赖兼容解决 简介 Centos安装Docker 配置镜像加速 启动Docker

    1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 ● 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 ● 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题

    2024年04月10日
    浏览(52)
  • 解决CocoaPods could not find compatible versions for pod “React-Core”

    一、当执行ios项目时,执行 pod install 出现下面的错误信息 二、错误原因 这个错误是由于 React-Core 这个依赖库需要的最低部署目标高于当前项目的部署目标,导致 CocoaPods 找不到符合要求的版本。 三、要解决这个问题,可以尝试以下几个步骤 检查项目的部署目标是否符合 R

    2024年02月12日
    浏览(47)
  • iOS pod install失败,提示CocoaPods could not find compatible versions for pod “***“

    1.pod install失败 在执行 pod install 的时候会失败,提示如下: 按提示执行 pod install --repo-update 之后,还是失败,提示: 造成报错的原因有两种: 一、两者的都是由于本地索引库没有更新到最新,找不到对应版本的spec文件。 二、第三方库依赖的系统版本号,高于项目的最低支

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包