对于刚从Oracle数据库转到达梦数据库,SQL语法的使用基本一致,有一些差别,下面总结的一些常用SQL语法差别。
1.导入数据
Oracle
@ test.sql
达梦
start test.sql
` test.sql
2.返回查询数据的返回行
Oracle:rownum,不支持top,limit 查找第一行数据
select * from department where rownum=1;
查询第二行数据select * from department where rownum=2;是查不到的 可以通过子查询 select * from (select rownum no,DEPT_NO,DEPT_NAME from department)where no=2; 查询前n-1行数据
select * from department where rownum<6;
达梦:支持rownum,limit,top 在达梦中查询当前用户的非默认模式中的表时,需要指定模式
select * from dmhr.DEPARTMENT limit 5;
select top 3 * from dmhr.DEPARTMENT;
3 外连接用法
Oracle “ + ”加号放在哪边,哪边无论是否匹配返回所以数据 select a.DEPT_NO, b.EMP_NO from department a,EMP_DEPT b where a.DEPT_NO = b.DEPT_NO(+); 达梦:兼容“+”,还有left join,right join,full join
select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.DEPARTMENT_ID, b.DEPARTMENT_NAME
from dmhr.employee a left outer join dmhr.department b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID;
4.多列IN用法
Oracle 第一种方式
select dept_no,dept_name from department where (dept_no,dept_name)
in (('d001','Marketing'),('d002','Finance'));
in后面相当于一个二维表格 第二种方式
select dept_no,dept_name from department where (dept_no,dept_name)
in (select dept_no,dept_name from department);
in后面跟查询的两列返回的结果集,这里只是为了测试,实际情况可查找其他表. 达梦第一种方式,第二种方式都兼容
select department_id,department_name from dmhr.department where
(department_id,department_name)
in (('101','总经理办'),('102','行政部'));
5.INSTEAD OF触发器
Oracle 只适用于视图,不能作用在表上 不能指定before和after 必须包含for each row选项 在视图上创建触发器引起表的数据变化,从而让视图查询的结果变化 创建视图
create view view_dept
as
select * from dept;
创建触发器
CREATE OR REPLACE TRIGGER tr_instead_view_dept
INSTEAD OF INSERT ON view_dept
FOR EACH ROW
BEGIN
INSERT INTO dept (epno, ename,loc) VALUES (:new.epno, :new.ename,:new.loc);
END;
向视图插入数据时会触发视图的基表发生变化。 查看视图view_dept 向dept表插入数据
insert into view_dept values(4,'new1','new2');
查看视图view_dept 查看基表dept 可以看到基表数据也已经改变。
6 数据类型的不同
时间类型有一点不同,其余数据类型基本一致。 Oracle DATE TEMPSTAMP DATE:固定长度(7字节)的日期型,时间也作为一部分存储其中。数据格式:YYYY/MM/DD HH24:MI:SS TIMESTAMP:date类型的一个扩展,date类型会存储年月日时分秒信息,timestamp类型精度更高,会存储到微秒、纳秒。
达梦 DATE TIME TIMESTAMP DATE:日期型,包括年、月、日信息。数据格式:date ‘1999-10-01’ TIME:时间型,包括时、分、秒信息。格式:time ’09:10:21’ TIMESTAMP:时间戳型,包括年月日时分秒信息。例如:timestamp ‘1999-07-13 10:11:22’ 在Oracle数据库向达梦数据库数据迁移时需要设置参数数据库兼容模式:COMPATIBLE_MODE,设置为2即兼容Oracle 是否兼容其他数据库模式。 0:不兼容, 1:兼容 SQL92 标准, 2:部分兼容 ORACLE, 3:部 分兼容 MS SQL SERVER, 4:部分兼容 MYSQL, 5:兼容 DM6, 6:部分兼容 TERADATA
7.数据字典和动态性能视图
Oracle 数据字典:记录了数据库的最基本的信息。 数据字典包括数据字典基本表和数据字典视图 数据字典视图分为三种类型:USER_、ALL_、DBA_。 USER_类型的视图表示当前登录用户拥有的信息。 ALL_类型的视图表示当前登录用户有权限看到的信息。 DBA_类型的视图表示数据库管理员能够看到的信息,整个数据库范围内的信息。 Eg:查看当前用户下所有列 select * from user_tab_cols; 动态性能视图 v
p
a
r
a
m
e
t
e
r
初始化参数文件中所有项的值
v
parameter 初始化参数文件中所有项的值 v
parameter初始化参数文件中所有项的值vprocess:当前进程的信息 v
s
e
s
s
i
o
n
:
有关会话的信息
v
session:有关会话的信息 v
session:有关会话的信息vsysstat:基于当前操作会话进行的系统统计 v
l
o
g
:从控制文件中提取有关重做日志组的信息
v
log:从控制文件中提取有关重做日志组的信息 v
log:从控制文件中提取有关重做日志组的信息vlogfile有关实例重置日志组文件名及其位置的信息 v
l
o
c
k
:当前进程已获得的和正在请求的锁定信息
v
lock:当前进程已获得的和正在请求的锁定信息 v
lock:当前进程已获得的和正在请求的锁定信息vtransaction:数据库的事务信息 v$fixed_view_definition中记录了所有的动态性能视图的定义信息
oracle可以使用show parameter 参数名,达梦没有此用法。
达梦 数据字典和动态性能视图和oracle基本一致 select * from user_tables; 查询时数据字典和动态性能视图可以不指定模式。 select * from V$PARAMETER;
了解更多详情请访问达梦数据库-新一代大型通用关系型数据库
|