-
和mysql语法相同_Oracle和Mysql语法异同整理笔记
(1) 模糊匹配 Oracle的模糊匹配和mysql是不同的,在mybatis项目里,用Oracle,我们可能会这样写:where a like '%'|| #{参数} ||'%',不过放在mysql就不兼容了,mysql的做法是这样的where a like concat('%', #{参数} ,'%') (2) 删除数据 一个小细节,在Oracle里删除数据,delete 表格 t where t.id = '?' 或者 delete from 表格 t where t.id = '?' 不加关键字from或者用和不用别名t都是可以的,不过放在mysql5.X就不可以了,其它Mysql版本没验证过,Mysql版本要求必须加关键字from同时不能加别名 delete from 表格 where id = '?' (3) 时间函数 Oracle的时间函数和Mysql的时间函数是不同的,Oracle的格式是to_date('2019-02-12 14:20:22', 'yyyy-mm-dd hh24:mi:ss'),Mysql的格式是str_to_date('2019-02-12 11:34:32', '%Y-%m-%d %H:%i:%s') (4) 关键字问题 在Oracle还是mysql建表的时候,一般都不要用数据库关键字做表的字段,比如Order,CONDITION等等,特别是mysql就直接报错。假如用CONDITION做表字段,在写入数据的时候就要用CONDITION,加“`”符号,例子 insert into table (UUID, `CONDITION`, FLAG,CREATE_TIME) values ('EAF472C6332241FBBBB22A37336BBD65', '', '${voteLZ_Boolean}', 'control/doApprFlowNew', str_to_date('13-06-2018 17:38:33', '%d-%m-%Y %H:%i:%s')); (5) 递归查询 oracle实现递归查询的话,就可以使用start with … connect by,mysql并没有通过类似函数,解决方法是通过自定义函数的方法,具体可以参考我这篇博客 https://blog.csdn.net/u014427391/article/details/87297884 (6) 排序问题 oracle做数据排序的时候,有时候可以用nulls first或者nulls last将null值排在最前或者最后。 不过迁到Mysql的话,mysql并没有提供类似函数,所以要怎么实现?下面给出解决方法: null值……
SE_Meng 2024-05-117 0 0 -
总结MySQL和Oracle的语法区别
1、时间函数 mysql oracle 时间转换为字符串型时间 date_format(NOW(),‘%Y-%m-%d’) to_char(sysdate, ‘YYYY-MM-DD’) 字符串型时间转换为时间类型 date_format(NOW(),‘%Y-%m-%d’) to_date(‘2020-12-01’, ‘YYYY-MM-DD’) 2、空值返0 mysql oracle IFNULL、COALESCE nvl、nvl2 说明: nvl:基本语法为nvl(E1,E2),意思是E1为null就返回E2,不为null就返回E1。 nvl2:nvl2函数的是nvl函数的拓展,基本语法为nvl2(E1,E2,E3),意思是E1为null,就返回E3,不为null就返回E2。 IFNULL:基本语法为IFNULL(E1,E2),假如E1不为NULL,则返回值为E1,否则为E2。 COALESCE:COALESCE(value,…)是一个可变参函数,可以使用多个参数。作用:接受多个参数,返回第一个不为NULL的参数,如果所有参数都为NULL,此函数返回NULL;当它使用2个参数时,和IFNULL函数作用相同。 3、长度函数 mysql oracle char_length(str) length(str) 4、条件函数 mysql oracle IFNULL nvl IF(expr1,expr2,expr3) nvl2 IF(value=val1, val2, val3)、case when DECODE 说明: IF(expr1,expr2,expr3):如果expr1不为null,则返回expr2,否则返回expr3。 IF(value=val1, val2, val3):如果value等于val1,则返回val2,否则返回val3。 case when then else end:如果value等于if1,则返回val1,如果value等于if2,则返回value2…如果value等于ifn,则返回valn,否则返回val。 SELECT CASE WHEN STATUS = '1' THEN 'success' WHEN STATUS = '0' THEN 'faild' ELSE 'error' END FROM SYS_SCHEDULER 5、trunc()函数 MySQL Oracle truncate(123.123,2) TRUNC(123.123,2) 6、字符串整型转换函数 MySQL Oracle 整型转字符串 CAST(123 AS CHAR(3)) to_char(123) 字符串转整型 cast(‘123’ as SIGNED) to_number(‘123’) 7、引号 MySQL可识别双引号和单引号……
SE_Meng 2024-05-1019 0 0 -
oracle 01804,ORA-01804: failure to initialize timezone information
把EBS 数据库从11.1.0.7升级到11.2.0.4后,无法登陆 [[email protected] PROD_ebsprod]$ sqlplus / as sysdba ERROR: ORA-01804: failure to initialize timezone information SP2-0152: ORACLE may not be functioning properly FIX: ############################# # Timezone Specification file # For 11gR2,time zone file location should by empty ############################# export ORA_TZFILE="" 正常登陆: [[email protected] 11.2.0]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sun Jun 19 09:05:17 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
SE_Meng 2024-05-0921 0 0 -
oracle错误代码大全
ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话 ORA-00022: 无效的会话 ID;访问被拒绝 ORA-00023: 会话引用进程私用内存;无法分离会话 ORA-00024: 单一进程模式下不允许从多个进程注册 ORA-00025: 无法分配 ORA-00026: 丢失或无效的会话 ID ORA-00027: 无法删去当前会话 ORA-00028: 您的会话己被删去 ORA-00029: 会话不是用户会话 ORA-00030: 用户会话 ID 不存在。 ORA-00031: 标记要删去的会话 ORA-00032: 无效的会话移植口令 ORA- 00033: 当前的会话具有空的移植口令 ORA-00034: 无法在当前 PL/SQL 会话中 ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数 ORA-00036: 超过递归SQL() 级的最大值 ORA-00037: 无法转换到属于不同服务器组的会话 ORA-00038: 无法创建会话: 服务器组属于其它用户 ORA-00050: 获取入队时操作系统出错 ORA-00051: 等待资源超时 ORA-00052: 超出最大入队资源数 () ORA-00053: 超出最大入队数 ORA-00054: 资源正忙,要求指定 NOWAIT ORA-00055: 超出 DML 锁的最大数 ORA-00056: 对象 '.' 上的 DDL 锁以不兼容模式挂起 ORA-00057: 超出临时表锁的最大数 ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(非 ) ORA-00059: 超出 DB_FILES 的最大值 ORA-00060: 等待资源时检测到死锁 ORA-00061: 另一个例程设置了不同的 DML_LOCKS ORA-00062: 无法获得 DML 全表锁定;DML_LOCKS 为 0 ORA-00063: 超出 LOG_FILES 的最大数 ORA-00064: 对象过大以至无法分配在此 O/S (,) ORA-00065: FIXED_DATE 的初始化失败 ORA-00066: LOG_FILES 为 但需要成为 才可兼容 ORA-00067: 值 对参数 无效;至少必须为 ORA-00068: 值 对……
SE_Meng 2024-05-085 0 0 -
Oracle SQL错误码及其含义
Oracle SQL错误码,以下是一些常见的Oracle SQL错误码及其含义: ORA-00001: 唯一约束条件违反(Unique constraint violation) - 这是一个非常常见的错误,表示您尝试插入或更新一条违反唯一性约束的数据。 ORA-00002: 无效的数字(Invalid number) - 这个错误通常表示您尝试将一个非数字字符串转换为数字,但是转换失败了。 ORA-00003: 无效的日期(Invalid date) - 当您尝试将一个无效的日期字符串插入到日期类型的列时,会出现这个错误。 ORA-00004: 无效的时间戳(Invalid timestamp) - 当您尝试将一个无效的时间戳字符串插入到时间戳类型的列时,会出现这个错误。 ORA-00005: 无效的字符串(Invalid string) - 当您尝试将一个无效的字符串插入到字符串类型的列时,会出现这个错误。 ORA-00007: 格式模型不匹配(Format model mismatch) - 当日期字符串的格式与数据库期望的格式不匹配时,会出现这个错误。 ORA-00014: 会话在等待事务提交期间超时(Session timed out during wait for transaction to commit) - 当会话在等待事务提交期间超时时,会出现这个错误。 ORA-00018: 数据库已达到最大锁定等级(Database has reached maximum lock level) - 当数据库达到最大锁定等级时,会出现这个错误。 ORA-00031: 文件无法打开(File cannot be opened) - 当数据库尝试打开一个无法访问的文件时,会出现这个错误。 ORA-00035: 文件已在使用中(File is already in use) - 当数据库尝试打开一个已经被其他进程使用的文件时,会出现这个错误。 以下是一些常见的Oracle SQL错误码及解决方案: ORA-00942: 表或视图不存在这个错误通常意味着你正在尝试访问的表或视图在数据库中不存在。请检查表名或视图名是否正确,或者是否有权限访问该对象。 ORA-00936: 缺少必要参数这个错误表明在SQL查询中缺少必要……
SE_Meng 2024-05-0723 0 0 -
Oracle 11g RAN恢复-表空间在只读时做了数据库的备份
场景描述: 表空间在只读时做了数据库的备份(备份A),做了控制文件的备份(备份B),而后表空间变为read/write状态,表空间数据文件和控制文件都损坏 此时需要用备份B来还原控制文件,使用备份A来还原数据文件。 --0. 场景模拟 --0.1 修改表空间mynewts进入read only状态 sys@TESTDB11>alter tablespace mynewts read only; Tablespace altered. --0.2 删除原有备份,进行全库非一致性备份 RMAN> backup database; Starting backup at 15-AUG-13 using channel ORA_DISK_1 using channel ORA_DISK_2 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=/oradata/system01.dbf input datafile file number=00003 name=/oradata/undotbs01.dbf input datafile file number=00008 name=/oradata/users02.dbf input datafile file number=00009 name=/oradata/mynewts01.dbf input datafile file number=00007 name=/oradata/fbtbs01.dbf channel ORA_DISK_1: starting piece 1 at 15-AUG-13 channel ORA_DISK_2: starting full datafile backup set channel ORA_DISK_2: specifying datafile(s) in backup set input datafile file number=00002 name=/oradata/sysaux01.dbf input datafile file number=00005 name=/oradata/example01.dbf input datafile file number=00006 name=/oradata/newts01.dbf input datafile file number=00004 name=/oradata/users01.dbf channel ORA_DISK_2: starting piece 1 at 15-AUG-13 channel ORA_DISK_1: finished piece 1 at 15-AUG-13 piece handle=/pooldisk02/backup03/4hohbfcm_1_1 tag=TAG20130815T081933 comment=NONE channel ORA_DISK_1: bac……
SE_Meng 2024-05-0616 0 0 -
启动报ORA-00211 ORA-00202错误
C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 星期二 10月 13 21:35:45 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt ions SQL> select open_MODE FROM V$DATABASE; select open_MODE FROM V$DATABASE * 第 1 行出现错误: ORA-01507: ?????? SQL> alter database mount; alter database mount * 第 1 行出现错误: ORA-00211: control file does not match previous control files ORA-00202: control file: ''D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ORCL12C\CONTROL02.CTL'' 控制文件版本不匹配 手动把可以正常启动的机器里的 覆盖不能正常启动的机器这个路径下 然后执行 SQL> shutdown immediate; SQL> startup 出现ora-00214错误 注:两台机器都需要执行以下 然后执行 SQL> show parameter control; NAME TYPE --------------------/---------------- ---------------------- VALUE ------------------------------ control_file_record_keep_time integer 7 control_files string D:\APP\ADMINISTRATOR\ORADATA\O RCL12C\CONTROL01.CTL, D:\APP\A DMINISTRATOR\FAST_RECOVERY_ARE A\ORCL12C\CONTROL02.CTL control_management_pack_access string DIAGNOSTIC+TUNING SQL> alter system set control_files='S:\ORADATA\KTMS\CONTROL01.CTL' scope=spfile; 系统已更改。 SQL> shutdown abort ORACLE 例程已经关闭。 SQL>……
SE_Zhang 2024-04-30170 0 0 -
ORA-01113,ORA-01110的简单解决
分析和解决问题: 1.重起数据库: C:\Documents and Settings\Jacken>sqlplus /nolog SQL> conn sys/123456 as sysdba; SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup; Total System Global Area 293601280 bytes Fixed Size 1248600 bytes Variable Size 100663976 bytes Database Buffers 184549376 bytes Redo Buffers 7139328 bytes 数据库装载完毕。 第 1 行出现错误: ORA-01113: 文件 1 需要介质恢复 ORA-01110: 数据文件 1: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\SYSTEM01.DBF' 执行startup却无法启动,出现ORA-01113,ORA-01110的错误。那好办,恢复文件。 2.恢复文件介质 SQL> shutdown immediate; SQL> recover datafile 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\SYSTEM01.DBF'; 完成介质恢复。 {=suggested | filename | AUTO | CANCEL} SQL> alter database open; SQL> startup; 这样问题就解决了!
SE_Zhang 2024-04-29185 0 0 -
Oracle单机Dataguard环境拆分
备库关机 主库执行操作: //实时生效 alter system set LOG_ARCHIVE_CONFIG='' scope=both sid='*'; //确定归档目录 alter system set LOG_ARCHIVE_DEST_1='LOCATION=+ARCH' scope=both sid='*'; alter system set LOG_ARCHIVE_DEST_2='' scope=both sid='*'; alter system set fal_client='' scope=both sid='*'; alter system set FAL_SERVER='' scope=both sid='*'; alter system set standby_file_management=manual scope=both sid='*'; //重启生效 alter system reset DB_FILE_NAME_CONVERT scope=spfile sid='*'; alter system reset LOG_FILE_NAME_CONVERT scope=spfile sid='*'; //主要DB_FILE_NAME_CONVERT 和LOG_FILE_NAME_CONVERT 不用reset而是执行以下命令数据库会起不来: alter system set DB_FILE_NAME_CONVERT=’’ scope=spfile sid='*'; alter system set LOG_FILE_NAME_CONVERT=’’ scope=spfile sid='*';
SE_Zhang 2024-04-2923 0 0 -
Oracle CTSS时间同步
概述 OCTSSD(Oracle Cluster Time Synchronization Service Daemon)进程被用于集群服务器之间的时间同步。 CTSS时间同步服务作为Clusteware的一部分被安装,在系统中,如果察觉到时间同步服务或者时间同步服务配置,那么CTSS将以观察模式(Oberver Mode)启动和运行,不执行时间同步操作。CTSS守护进程能随时被安装,并将一直运行,但是只有在系统符合配置条件情况下才会起作用。如果NTP不存在于任何的集群服务器中,CTSS将被激活,接管集群的时间管理工作,以活动模式(Active Mode)启动和运行,使用集群其中一个服务器作为参考服务器,同步集群中的其他服务器的时间。 下面查看RAC节点1和节点1的CTSS服务的状态,发现都处于观察者模式状态(Observer mode): 节点1: root@quyu11 ~]# su - grid [grid@quyu11 ~]$ crsctl check ctss CRS-4700: The Cluster Time Synchronization Service is in Observer mode. 节点2: [root@quyu12 ~]# su - grid [grid@quyu12 ~]$ crsctl check ctss CRS-4700: The Cluster Time Synchronization Service is in Observer mode. [grid@quyu12 ~]$ RAC的CTSS服务处于观察者模式,是因为上面描述中提到的“如果察觉到时间同步服务或者时间同步服务配置,那么CTSS将以观察模式(Oberver Mode)启动和运行”,这里时间同步服务虽然没有开启,但配置文件仍然存在,所以CTSS以观察模式运行,如下: 节点1: [root@quyu11 ~]# service ntpd status ntpd 已停 [root@quyu11 ~]# ls /etc/ntp.conf /etc/ntp.conf [root@quyu11 ~]# 节点2: [root@quyu12 ~]# service ntpd status ntpd 已停 [root@quyu12 ~]# ls /etc/ntp.conf /etc/ntp.conf [root@quyu12 ~]# 下面将两个节点的文件删除,这里将此文件更改其他文件名: 节点1: [root@quyu11 ~]# mv /etc/ntp.conf /etc/ntp.conf.bak……
SE_Zhang 2024-04-2821 0 0