统一SQL-支持CHAR和VARCHAR2 (size BYTE|CHAR)转换

embedded/2024/9/24 7:17:22/

统一SQL介绍

https://www.light-pg.com/docs/LTSQL/current/index.html

源和目标

数据库:Oracle

目标数据库:Postgresql,TDSQL-MySQL,达梦8,LightDB-Oracle

操作目标

在Oracle中的CHAR和VARCHAR2数据类型,如下图所示,根据参数语义,在存储时可以选择以字节还是字符进行存储。

目前统一SQL也加上了BYTE和CHAR两个语法词的解析,根据目标库对该语义的支持程度进行SQL改写。

统一SQL转换

下表是oracle到目标库通过统一SQL转换前后的对比

Oracle2Posgresql

转换前后SQL:

-- 转换前Oracle SQL  char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char));
-- 转换后Postgresql SQL char/character
CREATE TABLE unisql_character_type_test (c1 char,c2 char(10),c3 char(10),c4 char(10),c11 char,c12 char(10),c13 char(10),c14 char(10))-- 转换前Oracle SQL  varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10),c12 varchar(10 byte),c13 varchar(10 char));
-- 转换后Postgresql SQL varchar2/varchar
CREATE TABLE unisql_character_type_test (c1 varchar(10),c2 varchar(10),c3 varchar(10),c11 varchar(10))

Oracle2TDSQL-MySQL

转换前后SQL:

-- 转换前Oracle SQL  char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char));
-- 转换后TDSQL-MySQL SQL char/character
CREATE TABLE `unisql_character_type_test` (`c1` char,`c2` char(10),`c3` char(10),`c4` char(10),`c11` char,`c12` char(10),`c13` char(10),`c14` char(10))-- 转换前Oracle SQL  varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10),c12 varchar(10 byte),c13 varchar(10 char));
-- 转换后TDSQL-MySQL SQL varchar2/varchar
CREATE TABLE `unisql_character_type_test` (`c1` varchar(10),`c2` varchar(10),`c3` varchar(10),`c11` varchar(10))

Oracle2DM

转换前后SQL:

-- 转换前Oracle SQL  char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char));
-- 转换后达梦8 SQL char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char))-- 转换前Oracle SQL  varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10),c12 varchar(10 byte),c13 varchar(10 char));
-- 转换后达梦8 SQL varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10))

Oracle2LightDB-Oracle

转换前后SQL:

-- 转换前Oracle SQL  char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char));
-- 转换后LightDB-Oracle SQL char/character
CREATE TABLE unisql_character_type_test(c1 char,c2 char(10),c3 char(10 byte),c4 char(10 char),c11 character,c12 character(10),c13 character(10 byte),c14 character(10 char))-- 转换前Oracle SQL  varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10),c12 varchar(10 byte),c13 varchar(10 char));
-- 转换后LightDB-Oracle SQL varchar2/varchar
CREATE TABLE unisql_character_type_test(c1 varchar2(10),c2 varchar2(10 byte),c3 varchar2(10 char),c11 varchar(10))

Oracle其他数据类型到目标库的转换可参考统一SQL官方手册

https://www.light-pg.com/docs/LTSQL/current/index.html


http://www.ppmy.cn/embedded/3543.html

相关文章

【MogDB】在ORACLE和MogDB中查看存储过程出参游标数据的方式

一、前言 使用ORACLE作为数据库的应用软件中,偶尔会遇到使用游标作为出参的存储过程,这种存储过程迁移到MogDB并不需要进行改造,但是在开发这样的存储过程时,开发人员偶尔会想要在数据库中测试执行一下,看看游标中的数…

Labview2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW是一种由美国国家仪器(NI)公司开发的程序开发环境,它显著区别于其他计算机语言,如C和BASIC。传统的计算机语言是基于文本的语言来产生代码,而LabVIEW则采用图形化…

03-JAVA设计模式-责任链模式

责任链模式 什么是责任链模式 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许你将请求沿着处理者链进行传递。每个处理者均对请求进行某些处理,并可决定是否将请求沿着链传递下去。这种模式给予请求的处理…

C#:for循环

任务描述 我们再来看看扑克牌问题: 过年的时候,朋友家人聚在一起,经常玩个活动。比如玩扑克牌,扑克牌有多种玩法,但一般起牌的时候,会按照某种序列拿在手中,有的人喜欢从大到小,有的…

大型网站系统架构演化实例_7.使用NoSQL和搜索引擎

1.使用NoSQL和搜索引擎 随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持…

小程序AI智能名片S2B2C商城:AIGC系统赋能多元化应用场景新探索

随着人工智能技术的飞速发展,AIGC系统正逐渐渗透到各行各业,其中小程序AI智能名片S2B2C商城便是其应用的重要领域之一。AIGC系统以其强大的内容生成能力,为商城提供了更为丰富、个性化的内容体验,进一步推动了商城的数字化转型与升…

Android 12.0 framework中禁止某个无源码app使用分屏功能

1.前言 在12.0的系统rom定制化开发中,在app中多窗口模式中,分屏模式也是其中的一种模式,可以通过app内部设置分屏的属性,然后实现 app启动的时候分屏功能,在无源码的app中就没办法更改。就需要在安装的时候修改这个属性,接下来实现这个功能 2.framework中禁止某个无源码…

单例模式五种写法

单例模式五种写法 单例模式有五种写法:饿汉、懒汉、双重检验锁、静态内部类、枚举. 单例模式属于设计模式中的创建型模式 一、单例模式应用场景 windows的task manager(任务管理器)就是很典型的单例模式; windows的recycle bin(回收站)也是典型的单例应用&#…