Oracle到mysql转换的问题总结

合集下载

oracle转mysql sql语句

oracle转mysql sql语句

oracle转mysql sql语句在oracle转mysql时,需要将sql语句进行相应的修改和调整。

以下是一些常见的需要处理的问题和需要注意的地方:1. 数据类型的差异Oracle和MySQL的数据类型是有所不同的,某些数据类型可以直接转换,但也有一些需要手动进行调整。

比如:- VARCHAR2 在MySQL中转化为VARCHAR- NUMBER 在MySQL中转化为INT或DOUBLE- DATE 在MySQL中转化为DATETIME- CLOB 在MySQL中转化为LONGTEXT- BLOB 在MySQL中转化为LONGBLOB2. 数字类型的区别Oracle和MySQL的数字类型也存在差异,在转换过程中需要注意一些问题:- 在Oracle中,数字类型可以带有参数,如NUMBER(10,2),这表示总长度为10位,小数点后有2位。

而MySQL中,数字类型的参数只是指长度,如DECIMAL(10,2)指总长度为10位,小数点后有2位。

因此在转换的时候需要进行对应的调整。

- 另外,在Oracle中有一种特殊的数据类型叫做NUMBER,它在MySQL中没有对应的类型。

为了进行转换,需要将其替换为具体的数字类型,如INT或DOUBLE。

3. SQL语法的差异Oracle和MySQL的SQL语法也存在一些差异,需要进行相应的修改和调整。

比如:- 在Oracle中,使用双引号可以引用列名或表名,而在MySQL中只能使用反引号(`)进行引用。

因此需要将双引号换成反引号。

- 在Oracle中,使用+号连接字符串,而在MySQL中使用CONCAT函数。

因此需要将+号换成CONCAT函数。

- 在Oracle中,LIMIT语句使用ROWNUM来完成,而在MySQL中使用LIMIT 关键字。

因此需要相应进行改写。

当然,以上仅是一些常见的情况,具体的转换过程还需要根据具体情况进行逐一分析和处理。

在进行转换时需要特别仔细,尽量避免出现错误和漏洞,确保数据的安全和准确性。

ORACLE和MYSQL一些函数和实现效果的对比替换

ORACLE和MYSQL一些函数和实现效果的对比替换

ORACLE和MYSQL一些函数和实现效果的对比替换Oracle和MySQL是两种常见的关系型数据库管理系统(RDBMS)。

尽管它们有相似的功能和语法,但在一些函数和实现效果方面存在一些差异。

下面是一些Oracle和MySQL函数及其替换或对比的例子:1.数据类型的转换:- Oracle中使用TO_CHAR、TO_NUMBER、TO_DATE等函数来转换数据类型。

而在MySQL中,可以使用CAST或CONVERT函数来实现类似的功能。

2.字符串函数:- Oracle中的函数SUBSTR、INSTR、CONCAT可以在MySQL中使用相同的名称进行替换。

但是在MySQL中,可以使用CONCAT_WS函数实现更多的字符串连接功能。

- 例如,使用SUBSTR函数来截取字符串,在Oracle中可以这样写:SUBSTR('Hello World', 7, 5);而在MySQL中可以这样写:SUBSTRING('Hello World', 7, 5)。

- 在Oracle中使用INSTR函数来查找字符串的位置,比如INSTR('Hello World', 'Wo');而在MySQL中可以使用LOCATE函数实现相同的功能:LOCATE('Wo', 'Hello World')。

3.日期和时间函数:- Oracle和MySQL都提供了一系列的日期和时间函数,如SYSDATE、CURRENT_TIMESTAMP、ADD_MONTHS、DATE_TRUNC等。

很多函数在两个数据库中名称和用法都相似,但也有一些区别。

- 例如,Oracle中的函数ADD_MONTHS可以用于添加月份,而在MySQL中,可以使用DATE_ADD函数实现相同的功能。

- 另一个例子是,Oracle中的函数DATE_TRUNC可以截取日期,如DATE_TRUNC('MONTH', sysdate);而在MySQL中可以使用DATE_FORMAT函数实现类似的效果:DATE_FORMAT(sysdate, '%Y-%m-01')。

oracle转mysql总结

oracle转mysql总结

oracle转mysql总结oracle转mysql总结ares-sdk初始开发测试使⽤的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql。

现对转换过程中出现的问题及经验总结如下:主键⽣成策略创建⼀个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1创建记录当前序列的表DROP TABLE IF EXISTS sequence;CREATE TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 1,PRIMARY KEY (name)) ENGINE=InnoDB;INSERT INTO sequence VALUES ('MovieSeq',3,5);创建⼀个获取当前序列的functionDROP FUNCTION IF EXISTS currval;CREATE FUNCTION currval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGINDECLARE value INTEGER;SET value = 0;SELECT current_value INTO valueFROM sequenceWHERE name = seq_name;RETURN value;END;获取下⼀个数值..先在sequence⾥⾯调⽤update当前最⼤数值+1然后再调⽤currval获得当前数值DROP FUNCTION IF EXISTS nextval;DELIMITER $CREATE FUNCTION nextval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGINUPDATE sequenceSET current_value = current_value + incrementWHERE name = seq_name;RETURN currval(seq_name);END$DELIMITER ;DROP FUNCTION IF EXISTS setval;DELIMITER $CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERCONTAINS SQLBEGINUPDATE sequenceSET current_value = valueWHERE name = seq_name;RETURN currval(seq_name);END$DELIMITER ;如果以上语句执⾏有异常请先执⾏这句:set global log bintrustfunction creators=TRUE;插⼊时的主键⽣成:mysql: SELECT MMC.NEXTVAL('SEQ_MD_ENTITY_ATTRIBUTE')oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual⽇期处理mysql : DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')oracle: TO_CHAR(SYSDATE,'YYYY-MM-DD hh24:mi:ss')nvl函数mysql: ifnull(ER_KPI,0)oracle: NVL(ER_KPI,0)to_numberoracle 的 to_numbermysql不需要关键字、保留字涉及到关键字,mysql关键字需要加上``号mysql: PARA_VALUE as `KEY`oracle : PARA_VALUE as KEYrownumUnknown column 'rownum' in 'where clause'oracle⾃定义sql中如果使⽤了rownum=1 mysql中可以写成limit 1⼤⼩写问题在oracle中⼀般情况下不区分⼤⼩写但在MySQL中,所使⽤操作系统的⼤⼩写敏感性决定了数据库名和表名的⼤⼩写敏感性。

PART1_ORACLE数据库移植到MYSQL迁移注意事项

PART1_ORACLE数据库移植到MYSQL迁移注意事项

ORACLE数据库移植到MYSQL迁移注意事项一、前言作为一个开源数据库,MySQL用无数案例证明了她的可用性,因此让我们把重点放在如何将Oracle移植到MySQL上。

有相当多的工具可以辅助这种移植过程。

但是,由于数据库实现的差异,完美的移植工具是不存在的,移植过程中不断碰到的问题证明了这一点,特别是您使用了Oracle的一些高级特性时。

从Oracle 移植到MySQL主要有六个方面的内容需要移植,一是表Table,包括表结构和数据,二是触发器Trigger,三是存储过程Procedure,函数 function和包Package,四是任务Job,五是用户等其他方面的移植,六是具体应用程序通过SQL语句访问时的细节差异克服。

二、表的移植这个部分的移植是最容易用工具实现的部分,因为很多MySQL的图形管理工具都自带这样的移植工具,比如SQLYog,MySQL Administrator等。

但是,这些工具的移植能力各有不同,对字段类型转换﹑字符集等问题都有自己的处理方式,使用时请注意。

我们使用“SQLYog Migration Toolkit”工具按提示步骤移植后,表的主要结构和数据将成功移植,主要包括表的字段类型(经过映射转换,比如number会转换为 double,date 转换为timestamp等,请小心处理日期字段的默认值等),表的主键,表的索引(Oracle的位图索引会被转成BTree索引,另外表和字段的注释会丢失)等信息。

需要特别注意的是,Oracle的自增字段的处理。

大家知道,Oracle 通常使用序列sequence配合触发器实现自增字段,但是MySQL和SQL Server等一样,不提供序列,而直接提供字段自增属性。

所以,请把Oracle里面的自增字段实现直接改为MySQL的字段属性,而且,这个字段必须是主键(key)并且不能有默认值。

还有一个问题,如果您的应用要直接使用Oracle的某个序列,那么您只能在MySQL里面模拟实现一个,具体方法就是利用MySQL的自增字段实现的。

Oracle云MySQLMsSQL“大迁移”真相及最优方案

Oracle云MySQLMsSQL“大迁移”真相及最优方案

Oracle云MySQLMsSQL“大迁移”真相及最优方案最近一段时间碰到一些数据迁移的项目,如:Oracle迁移到MySQL,MsSQL迁移到MySQL,云MySQL迁移到本地MySQL。

对于这方面做了系统的整理。

包括:迁移方案的选择、如何跳出迁移遇到的坑、怎样修改MySQL参数获取最大性能,加入分库分表的需求如何实现?文章的最后,作者做了很多可行性的总结,码字不易,如果对您有帮助,感谢转发。

迁移方案的选择:抛开业务逻辑的因素,根据不同的版本、不同平台、不同停机时间需求,有不同的可选路径决定迁移方法和工具:迁移方法优点缺点SQL LOAD操作简单、速度快、选择数据范围灵活需自定义开发批量操作、对于CLOB等特殊字段无法支持OGG商用软件,广泛的数据库平台支持、灵活的复制架构、基于日志的实时数据同步、稳定性高对维护技能有一定的要求、费用高ETL 软件使用方便简单、定时同步批量处理大量表需定制化配置MYSQL移植工具安装简单、可自动创建表不可定制、技术支持较弱定制迁移工具可高度定制,保证最佳性能和最短停机时间暂无由于不同的数据库版本、不同的组件安装、不同的应用开发特征都会导致迁移计划的复杂性和差异性。

调研中,除了OGG,有几个MySQL迁移的工具,推荐的比较多,但是收费的。

【工具:OGG (goldengate)同时支持Oracle,Mssql 迁移到 MySQL 上参数:filter,COMPUTE 进行分库分表逻辑】● SQLyog(/product/sqlyog)● Navicat Premium(/products/navicat-premium)● Mss2sql(/)● DB2DB(/DB2DB)选择迁移软件,必须要考虑软件易用性,处理速度和内存占用,数据完整性。

这部分很重要。

以上四款软件中:1. 最不推荐使用的是Navicat Premium,主要原因是数据的完整性表现较差,转换后的数据不能立即用于生产环境,需要程序员仔细自行查找原因和分析。

数据库迁移之-Oracle与MySQL互相转换

数据库迁移之-Oracle与MySQL互相转换

数据库迁移之-Oracle与MySQL互相转换理论上来说, MySQL 已经被Oracle 收购,这两者之间的Migrate 应该⽐较容易,但实际的迁移还是有⼀些问题,以下就说⼀说⼀些实现的⽅式和问题。

⽅式⼀:⼿动⽅式导⼊导出⼿动的⽅式导⼊,就是操作步骤会⽐较繁琐⼀些。

对Table 的结构和数据:1. 使⽤ SQL Developer 把 oracle 的 table 的schema 和 Data(.sql 和 .xls)导出2. 使⽤ MySQL 的 WorkBench 创建 Table 和导⼊数据。

这⾥语法上会稍微有⼀些不同,所以需要略微做⼀些调整。

对于View 来说,特别是复杂的有⼦查询的OracleView 说,要导⼊到MySQL 看起来就不是那么容易了。

⽅式⼆:使⽤⼯具Navicat 进⾏导⼊Navicat ,这是MySQL 官⽅⽹站上有⼈建议使⽤的⼯具。

这是⼀个收费的软件。

⽬前的收费是 1000 到1600 ⼈民币。

但是可以免费试⽤⼀个⽉。

下载安装地址:破解软件下载地址:启动的页⾯如下:迁移的流程如下:1. 新建数据库的连接建⽴需要迁移的Oracle 和 MySQL 的数据库连接。

另外,建⽴Oracle 连接的时候还需要下载⼀个oci.dll 的⽂件。

下载地址:下载之后,解压到某个⽬录:在 Navicat 的⼯具 --> 选项下做类似如下设置:细部可以参见:完成设置后,重启 navicat2. 设置过连接之后,接下来就可以进⾏表和数据的migrate 了点击:⼯具 --》数据传输在 "常规" 的标签页中设置需要 migrate 的连接在 “⾼级” 的标签页中,设置需要 migrate 哪些具体的内容:配置完成之后,点 "开始" 就可以了。

基本上:对于 Table 的结构和数据的迁移的话,基本上没什么问题。

但是对于 View 的导⼊,因为MySQL 的View 的语法不能有⼦查询语句。

如何从Oracle迁移到MySQL数据库

如何从Oracle迁移到MySQL数据库

如何从Oracle迁移到MySQL数据库从Oracle迁移到MySQL数据库简介:Oracle和MySQL都是目前广泛使用的关系型数据库管理系统(RDBMS)。

尽管两者在一些方面有所不同,但随着MySQL的快速发展和成熟,许多企业开始考虑从Oracle迁移到MySQL。

本文将探讨从Oracle迁移到MySQL的一些关键问题和最佳实践。

一、数据兼容性分析:在迁移过程中,首要任务是分析Oracle数据库和MySQL之间的数据兼容性。

由于Oracle和MySQL使用不同的SQL语法和数据类型,可能存在某些表、字段或查询存在差异的情况。

因此,在迁移之前,必须仔细检查数据库结构和数据,以确保在MySQL中正确创建和导入数据。

Oracle和MySQL之间的差异通常涉及以下方面:1. 数据类型:Oracle和MySQL支持不同的数据类型。

在转换时,需要注意数据类型的映射和兼容性。

2. 约束和索引:Oracle和MySQL的约束和索引有一些差异,需要逐个检查并调整。

3. 存储过程和触发器:Oracle和MySQL的存储过程和触发器语法也有所不同,需要做相应的调整。

二、数据迁移方法:1. 导出和导入数据:一种常见的迁移方法是使用Oracle的导出工具(如expdp)将数据导出为可移植的数据文件(例如,使用XML格式)。

然后使用MySQL的导入工具(如mysqlimport)将数据导入到MySQL数据库中。

这种方法简单直接,但可能会导致一些数据类型的兼容性问题。

2. 数据库连接工具:如果Oracle和MySQL之间的网络连接可用,可以使用数据迁移工具,如Oracle的Gateway或MySQL的Federated引擎,直接在两个数据库之间进行数据交换。

这种方法可以实现实时数据同步,并且具有较低的延迟。

3. 自定义脚本:对于一些复杂的数据迁移任务,可能需要编写自定义的脚本来处理数据转换和迁移过程。

这需要深入了解Oracle和MySQL的SQL语法和函数,以及相关的数据处理操作。

从Oracle迁移到MySQL的那些坑

从Oracle迁移到MySQL的那些坑
Create table Date type weak support
Type conversion
Only Windows
KETTLE
Step 1.Load mysql.jar Step 2.Configure And Mapping
Step 3.Run
Merits and Demerits:
Fast
Fastest Simple
It’s difficult to automate Data may be a problem
Demo
Python
Step 1.Create Mapping table
Step 2.Code、Code、Code
Step 3.Run procedure
Merits and Demerits:
APP
Congos
SQL_MODE
TRADITIONAL ONLY_FULL_GROUP_BY
Without Regard to any trailing spaces Explicit_defauls_for_timestamp
Performance Parameters
max_allowed_packet innodb_flush_log_at_trx_commit
Auto Mapping
Type conversion
Learning cost
KETTLE DEMO
VIEW
Materialized Views
refresh trigger event
performance
Procedure、Function、Trigger
Trigger OR %type Elseif、For Predefined :=、|| Annotation
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle到mysql转换的问题总结常用字段类型区别个别语句写法区别1.oracle里只可以用单引号包起字符串,mysql里可以用双引号和单引号。

2.mysql 在select * from () ....,from后面是一个结果集时,括号后面必须加上别名。

3.mysql在delete数据时不能给表加别名,如:delete from table1 T where....,会报错,但是可以这样写:delete T from table1 T where....。

4.Mysql不支持在同一个表中先查这个表在更新这个表,举个例子说明一下,insert into table1values(字段1,(select 字段2 from table1where...)),但是可以在后面那个table1加上别名就没有问题了。

insert into table1values(字段1,(select T.字段2 from table1T where...))5.MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。

ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

也可以自定义函数实现oracle的nextval。

6.翻页的sql语句处理,MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数,例如:select * from table limit m,n,意思是从m+1开始取n条。

常见的函数替换例子:Oracle:select decode(a,b,c,d) as col1 from table1;Mysql:selectcasewhen a=b then cwhen a!=b then dend as col1from table13.oracle的函数ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2),根据col1分组,在分组内根据col2排序,改函数计算的值就表示每组内部排序后的顺序编号。

Mysql没有这个函数,可以用mysql的用户变量来实现例子:Oracle:select row_number() over(partition by col1 order by col2) as num from table1 Mysql:select num1 as num from (select if(@pdept=col1,@rank:=@rank+1,@rank:=1) as num1,@pdept:=col1 from table1 order by col2 ) H这里用到mysql的用户变量。

4.oracle的行号ROWNUM,mysql没有这个行号,也需要用用户变量来实现。

例子:Oracle:select * from table1 where rownum - col1=0Mysql: select * from table1,(SELECT (@rowNum := 0)) HH where (@rowNum := @rowNum + 1) - col1=05.Oracle 中的substr (hello,a,b)mysql中是substring (hello,a,b) oracle的a=0和a=1是一样的,都是从第一个开始。

Mysql 是从0开始。

6.Oracle的nvl()对应mysql的ifnull()。

7.Oracle 中的WMSYS.WM_CONCAT(),列转行函数,以逗号隔开,mysql 可以用GROUP_CONCAT()进行替换。

8.Oracle的||可以用mysql的+替代,但是mysql在往某列加上字符时应该用concat,例如给表中name字段加上x:update table1 set name=concat(x,name)。

1.1 移植过程中重点问题1.1.1 数据类型差异ORACLE数据库和MYSQL数据库在数据类型方面差异比较大,而且数据类型也是一个数据库存储数据的基础,所以找到数据类型之间的对应是整个系统进行移植的基础。

以下给出了ORACLE à MYSQL数据类型的对应关系。

数值类型:NUMBER à DECIMAL,精度刻度都不变注:如果是序列用BIGINT字符串类型:VARCHAR2 à VARCHAR长度不变。

LONG à LONGTEXT这里有可能遇到的问题是超过主键key长度的问题,根据实际情况适当修改,如果是TEXT类型也需要指名长度,否则建立key会报错日期类型:DATE à DATETIMETIMESTAMP(N) à TIMESTAMP1.1.2 SQL语法差异SEQUENCE:MYSQL没有ORACLE中的SEQUENCE对象,我们在迁移的时候需要特别注意,一般SEQUENCE有两种用途:1、作为表中自增字段的序列号。

2、程序中获得自动编号。

MYSQL数据类型中存在 AUTO_INCREMENT为自增数据类型。

我们可以利用该数据类型变通一下来满足我们现有系统中的SEQUENCE功能。

1、对于ORACLE中SEQUENCE作为表的自增列一般是通过与触发器绑定实现的,在MYSQL中我们可以直接利用MYSQL的AUTO_INCREMENT类型来实现。

2、 ORACLE开发的应用程序中直接SELECT SEQUENCT来获得自动编号,对于这个功能我们也可以利用MYSQL的AUTO_INCREMENT类型来实现。

首先介绍一个函数,我们可以利用如下函数查询最后一个序列号的值:mysql> SELECT LAST_INSERT_ID();+------------------+| LAST_INSERT_ID() |+------------------+| 3 |+------------------+1 row in set (0.06 sec)我们可以创建一个含有自增列的表,对该表进行INSERT操作后,再利用LAST_INSERT_ID()函数来获得刚刚INSERT的值,也就是相当于ORACLE中的SEQUENCE. NETVAL。

也就是INSERT操作+SELECT操作获得一个自动编号。

mysql> CREATE TABLE MOCHA_BE_SEQUENCE(ID BIGINT NOT NULL PRIMA RY KEY AUTO_INCREMENT);Query OK, 0 rows affected (0.63 sec)mysql> INSERT INTO MOCHA_BE_SEQUENCE VALUES(NULL);Query OK, 1 row affected (0.09 sec)mysql> SELECT LAST_INSERT_ID();+------------------+| LAST_INSERT_ID() |+------------------+| 1 |+------------------+1 row in set (0.05 sec)mysql> INSERT INTO MOCHA_BE_SEQUENCE VALUES(NULL);Query OK, 1 row affected (0.06 sec)mysql> SELECT LAST_INSERT_ID();+------------------+| LAST_INSERT_ID() |+------------------+| 2 |+------------------+1 row in set (0.00 sec)BLOG:ORACLE和MYSQL都支持二进制大对象,数据类型的名称都是BLOB,在存储方面都是一样的,BLOB列没有字符集,并且排序和比较基于列值字节位数;在开发应用程序时需要注意对两种数据库BLOG类型的操作的差异。

视图Mysql视图限制(1)SELECT语句不能包含FROM子句中的子查询。

(2)SELECT语句不能引用系统或用户变量。

(3)SELECT语句不能引用预处理语句参数。

(4)在存储子程序内,定义不能引用子程序参数或局部变量。

(5)在定义中引用的表或视图必须存在。

但是,创建了视图后,能够舍弃定义引用的表或视图。

要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。

(6)在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。

(7)在视图定义中命名的表必须已存在。

(8)不能将触发程序与视图关联在一起。

我所要迁移的系统中的视图90%用到了子查询,解决方案是首先重新写查询语句,尽量避免子查询,避免不了,就将子查询中的内容,单独create成一个新的视图,然后再建立所需要的视图。

例子:Oracle中带子查询的视图:CREATE OR REPLACE VIEW MOCHA_IM_ALL_ACCOUNT_VIEW ASSELECT USER_ID AS ID, USER_NAME AS NAME, CONCAT(CONCAT(CONCAT( NVL(_CODE,'00000001.10000000'), '.00.'), PERSON_POSITION.PERSON_L EVEL), LPAD(PERSON__PERSON_NO,9,'0')) AS CODE, NVL(ORG.O RG_LEVEL, 1) AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM (SELECT ER_ID , ER_NAME, NVL(POSITION.O RG_ID, -1) AS ORG_ID, NVL(_PERSON_NO, 0) AS ORG_PERSON_N O, NVL(POSITION.PERSON_LEVEL, '64') AS PERSON_LEVEL FROM MOCHA_IM_PE RSON_POSITION POSITION, MOCHA_IM_PERSON PERSON WHERE E R_ID = ER_ID (+) AND PERSON.ADMIN_FLAG = '0' And PERSON.STAT US='A') PERSON_POSITION, MOCHA_IM_ORG_VIEW ORGWHERE PERSON__ID = _ID (+)UNION ALLSELECT USER_ID AS ID, USER_NAME AS NAME, '00000001.20000000.00.6400 0000000' AS CODE, 1 AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM MOCHA_IM_PERSON PERSON WHERE PERSON.ADMIN_FLAG = '0' And PERSON.STATUS='I'UNION ALLSELECT USER_ID AS ID, USER_NAME AS NAME, '00000001.30000000.00.6400 0000000' AS CODE,1 AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM MOCHA_IM_PERSON WHERE ADMIN_FLAG = '1' AND STATUS='A'UNION ALLSELECT LPAD(ORG_ID,20,' ') AS ID, ORG_NAME AS NAME, ORG_CODE AS CO DE,ORG_LEVEL AS REC_LEVEL, 'ORG' AS REC_TYPE FROM MOCHA_IM_ORG_VI EWUNION ALLSELECT '-1' AS ID, '未分派人员' AS NAME, '00000001.10000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE FROM DUALUNION ALLSELECT '-2' AS ID, '待删除人员' AS NAME, '00000001.20000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE FROM DUALUNION ALLSELECT '-3' AS ID, '系统管理员' AS NAME, '00000001.30000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE From DUAL/转为mysql:CREATE OR REPLACE VIEW PERSON_POSITION ASSELECT ER_ID , ER_NAME, IFNULL(_I D, -1) AS ORG_ID, IFNULL(_PERSON_NO, 0) AS ORG_PERSON_NO, IFNULL(POSITION.PERSON_LEVEL, '64') AS PERSON_LEVELFROM MOCHA_IM_PERSON_POSITION POSITION LEFT JOIN MOCHA_IM_PE RSON PERSON ON ER_ID = ER_IDWHERE PERSON.ADMIN_FLAG = '0' And PERSON.STATUS='A';/CREATE OR REPLACE VIEW MOCHA_IM_ALL_ACCOUNT_VIEW ASSELECT USER_ID AS ID, USER_NAME AS NAME,CONCAT(CONCAT(CONCAT(IFNULL(_CODE,'00000001.10000000'), '.00.'),PERSON_POSITION.PERSON_LEVEL), LPAD(PERSON__PERS ON_NO,9,'0')) AS CODE,IFNULL(_LEVEL, 1) AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM MOCHA_IM_ORG_VIEW ORG LEFT JOIN PERSON_POSITION ON PER SON__ID = _IDUNION ALLSELECT USER_ID AS ID, USER_NAME AS NAME, '00000001.20000000.00.6400 0000000' AS CODE, 1 AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM MOCHA_IM_PERSON PERSON WHERE PERSON.ADMIN_FLAG = '0' And PERSON.STATUS='I'UNION ALLSELECT USER_ID AS ID, USER_NAME AS NAME, '00000001.30000000.00.6400 0000000' AS CODE,1 AS REC_LEVEL, 'PERSON' AS REC_TYPEFROM MOCHA_IM_PERSON WHERE ADMIN_FLAG = '1' AND STATUS='A'UNION ALLSELECT LPAD(ORG_ID,20,' ') AS ID, ORG_NAME AS NAME, ORG_CODE AS CO DE,ORG_LEVEL AS REC_LEVEL, 'ORG' AS REC_TYPE FROM MOCHA_IM_ORG_VI EWUNION ALLSELECT '-1' AS ID, '未分派人员' AS NAME, '00000001.10000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE FROM DUALUNION ALLSELECT '-2' AS ID, '待删除人员' AS NAME, '00000001.20000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE FROM DUALUNION ALLSELECT '-3' AS ID, '系统管理员' AS NAME, '00000001.30000000' AS CODE, 1 AS REC_LEVEL, 'ORG' AS REC_TYPE From DUAL/触发器,函数,存储过程语法的区别,难点在于异常处理模块,其他要关注的比如定义游标的语法,mysql控制流程等等。

相关文档
最新文档