MSSQL和ORACLE的区别

更新时间:2023-11-01 00:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SQL和ORACLE的区别 一

1.字符串链接 - SQL: 用 + 链接 - ORACLE: 用 || 链接 2.变量定义

- SQL: 用 @ 前缀 - ORACLE: 无特殊用法 3.SELECT INTO

- SQL: Select @var = column ... - ORACLE: Select column into ar ... 4.日期转换

- SQL: convert(char(10), getdate(), 111) - ORACLE: to_char(sysdate, 'yyyy/mm/dd') 5.日期比较

- SQL: 允许和字符比较,如 getdate()>'2009.1.1' - ORACLE: 不允许,必须先用TO_DATE转换 6.日期运算

- SQL: 可用DateDiff运算,如DateDiff(Day, date1, date2)

- ORACLE: 用trunc(date2-date1),如果是月份可以用months_between(date1, date2) 7.日期运算2

- SQL: 可用DateAdd运算,如DateAdd(month, date1, 3)

- ORACLE: 如果是日,可以直接用date1 + 3表示,如果是月份,则:add_month(date1, 3) 8.假表 - SQL: 无 - ORACLE: dual 9.DML

- SQL: 可在T-SQL中建表 - ORACLE: 不能在存储过程中建表 10.存储过程

- SQL: 无结尾符号 - ORACLE: 用;结尾 11.存储过程2

- SQL: IF语句无对应的THEN语句 - ORACLE: 有THEN语句 12.存储过程2

- SQL: 赋值语句:select @var = xxx; - ORACLE: var := xxx 13.序列

- SQL: 无序列,但有自增ID字段 - ORACLE: 有序列

SQL中的全局变量

1> @@rowcount: 前一条命令处理的行数

2> @@error: 前一条SQL语句报告的错误号 3> @@trancount: 事务嵌套的级别 4> @@transtate: 事务的当前状态

5> @@tranchained: 当前事务的模式(链接的(chained)或非链接的) 6> @@servername: 本地SQL SERVER的名称 7> @@version : SQL SERVER和O/S的版本级别 8> @@spid: 当前进程的id

9> @@identity: 上次insert操作中使用的identity值 10> @@nestlevel: 存储过程/触发器中的嵌套层 11> @@fetch_status: 游标中上条fetch语句的状态

内置函数对比(第一个是SQL的,第二个是ORACLE的) 1.字符串函数 Ascii(char_exp) Ascii(str_exp) Char(int_exp) Chr(int_exp) Datalength(char_exp) Length(str_exp)

Substring(exp, start, length) Substr(exp, start, length) Upper(char_exp) Upper(str_exp) Lower(char_exp) Lower(str_exp)

Stuff(char_exp1,start,length, Char_exp2)

Translate(str_exp,from_str,to_str) Ltrim(char_exp)

Ltrim(str_exp1 [,str_exp2]) Rtrim(char_exp)

Rtrim(str_exp1 [,str_exp2])

2.日期函数 Getdate() Sysdate

3.数学函数 Abs(numeric_exp) Abs(number_exp) Ceiling(numeric_exp) Ceil(number_exp) Exp(float_exp) Exp(number_exp)

Floor(numeric_exp) Floor(number_exp) Power(numeric_exp,int_exp) Power(number_exp1,number_exp2) Round(numeric_exp,int_exp) Round(number_exp1 [,number_exp2]) Sign(int_exp) Sign(number_exp) Sqrt(float_exp) Sqrt(number_exp)

3.转换函数

Convert(datatype[(length)],exp,format) To_char(datatype,str_format)

Convert(datatype[(length)],exp,format)s To_date(str_exp,date_format) Convert(datatype[(length)],exp,format) To_number(str_exp,num_format)

4.聚合函数

AVG([ALL | DISTINCT] col) AVG([ALL | DISTINCT] col) COUNT({[ALL | DISTINCT] col] | *}) COUNT({[ALL | DISTINCT] col} | *)) MAX([ALL | DISTINCT] col) MAX([ALL | DISTINCT] col) MIN([ALL | DISTINCT] col) MIN([ALL | DISTINCT] col) SUM([ALL | DISTINCT] col) SUM([ALL | DISTINCT] col) STDEV(col) STDDEV(col) VAR(col) VARIANCE(col)

5.其它函数

ISNULL(check_exp, replace_value) NVL(check_exp, replace_value) CASE DECCODE

数据类型对比(第一个是SQL的,第二个是ORACLE的) 1.数字类型

DECIMAL[(P[, S])]

NUMBER[(P[, S])] NUMERIC[(P[, S])] NUMBER[(P[, S])] FLOAT[(N)] NUMBER[(N)] INT NUMBER SMALLINT NUMBER TINYINT NUMBER MONEY NUMBER[19,4] SMALLMONEY NUMBER[19,4]

2.字符类型 CHAR[(N)] CHAR[(N)] VARCHAR[(N)] VARCHAR2[(N)]

3.日期时间类型 DATETIME DATE

SMALLDATETIME DATE 4.其它 TEXT CLOB IMAGE BLOB BIT

NUMBER(1)

MSSQL和ORACLE的区别 二

S代表: SQL Server O代表: ORACLE

1.绝对值

S:select abs(-1) value

O:select abs(-1) value from dual

2.取整(大)

S:select ceiling(-1.001) value

O:select ceil(-1.001) value from dual 3.取整(小)

S:select floor(-1.001) value

O:select floor(-1.001) value from dual 4.取整(截取)

S:select cast(-1.002 as int) value

O:select trunc(-1.002) value from dual 5.四舍五入

S:select round(1.23456,4) value 1.23460

O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂

S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数

S:select log(2.7182818284590451) value 1

O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数

S:select log10(10) value 1

O:select log(10,10) value from dual; 1 9.取平方

S:select SQUARE(4) value 16

O:select power(4,2) value from dual 16 10.取平方根

S:select SQRT(4) value 2

O:select SQRT(4) value from dual 2 11.求任意数为底的幂

S:select power(3,4) value 81

O:select power(3,4) value from dual 81 12.取随机数

S:select rand() value

O:select sys.dbms_random.value(0,1) value from dual; 13.取符号

S:select sign(-8) value -1

O:select sign(-8) value from dual -1 ----------数学函数 14.圆周率

S:SELECT PI() value 3.1415926535897931 O:不知道

15.sin,cos,tan 参数都以弧度为单位

例如:select sin(PI()/2) value 得到1(SQLServer) 16.Asin,Acos,Atan,Atan2 返回弧度

17.弧度角度互换(SQLServer,Oracle不知道)

# groupadd oinstall /*建立群组*/ # groupadd dba /*建立群组*/

# mkdir -p /export/home/oracle /ocfs /*建立目录 -p 建立上级目录*/

# useradd -d /export/home/oracle -g oinstall -G dba -s /bin/ksh oracle /*建立用户 -g|-G建立上级目录 -d指定用户登入时的启始目录*/

# chown oracle:dba /export/home/oracle /u01 /*更改群组目录*/ # passwd oracle New Password:

Re-enter new Password:

passwd: password successfully changed for oracle /*该密码就不用多说了把*/ 创建 oracle 用户环境文件。 /export/home/oracle/.profile

然后添加环境变量 export 添加变量命令export [变量名称]=[变量设置值] export PS1=\export EDITOR=vi

export ORACLE_SID=devdb1

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:/bin: /usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin umask 022umask [-S][权限掩码]

创建文件系统目录结构。以 oracle 用户身份执行 rac1-> mkdir p $ORACLE_BASE/admin rac1-> mkdir p $ORACLE_HOME rac1-> mkdir p $ORA_CRS_HOME rac1-> mkdir -p /u01/oradata/devdb

今天是周末晚上到家了 听着歌 写一点关于备份存储方面的不同吧 先说下mssql 吧

看下面的命令先

backup database card /*备份数据库 card 是库名*/ to disk = 'c:\\card.bak' /*这是说备份到哪里了*/

restore filestonly /*这是还原数据库内的文件数及名称*/ form disk = 'c:\\card.bak'

restore database card2 /*改变数据库的名称*/

from disk = 'c:\\card.bak' /*还用的是原来那个card数据库*/

with more 'card' to 'c:\\card2.mdf' /*把card2的数据库存到这个地方*/ more 'card' to 'c:\\card2.log' /*把card2的日志文件存到这里*/

这是masql的的备份方法 上面这个 改变了 还原的数据的库的名称和存放地方 可以用到数据太大 硬盘空间不够 只能转存倒新的分区上面 另外说几个特殊的命令 RESTORE FILELISTONLY

返回由备份集内包含的数据库和日志文件列表组成的结果集。上面用到了 万一在还原时候 突然的原因关机了 停电了 该怎么办 要用倒restar 本人没有用过 只是听说过这个东西 RESTORE DATABASE MyNwind FROM MyNwind_1

WITH RESTART /*restar就是用到这里*/ GO

另外还要说一下 有怎么一个情况 看下面的几个语句就说的是完整数据库备份后进行差异数据库备份 restore database mysql from mysql2

with norecovery /*norecory 这个要注意*/ restore database mysql from mysql2

with flie = 2 /*file 标识要还原的备份集。file 后面为 1 表示备份媒体上的第一个备份集,file后面 为 2 表示第二个备份集*/

norecory 当还原数据库备份和多个事务日志时,或在需要多个 RESTORE 语句时(例如在完整数据库备份后进行差异数据库备份),SQL Server 要求在除最后的 RESTORE 语句外的所有其它语句上使用 WITH NORECOVERY 选项。

好了 mssql 备份还原就说到这里了 下面该 oracle的 plsql了中的逻辑备份命令 数据导出备份:

1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中 exp system/manager@TEST file=d:daochu.dmp full=y 2 将数据库中system用户与sys用户的表导出

exp system/manager@TEST file=d:daochu.dmp ōwner=(system,sys) 3 将数据库中的表inner_notify、notify_staff_relat导出

exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat) 4 将数据库中的表table1中的字段filed1以\打头的数据导出

exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=\数据的导入

1 将D:daochu.dmp 中的数据导入 TEST数据库中。 imp system/manager@TEST file=d:daochu.dmp

imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y 上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。 在后面加上 ignore=y 就可以了。 2 将d:daochu.dmp中的表table1 导入

imp system/manager@TEST file=d:daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

linux下使用 Oracle 恢复管理器 (RMAN) 备份和恢复 Oracle RAC 数据库的过程与单实例数据库的备份和恢复过程相同。

下面说个简单的备份恢复的例子 先看下步骤 1. 执行完整的数据库备份。

2. 在 test_d 表空间中创建 mytable 表。 3. 在 t1 时间,向 mytable 中插入第一个记录。 4. 在 t2 时间,向 mytable 中插入第二个记录。 5. 在 t3 时间,删除 mytable 表。 6. 将 test_d 表空间恢复到某个时间点。 7. 验证恢复结果。

执行完整的数据库备份。

rac1-> rman nocatalog target / /*进入rman*/

Recovery Manager: Release 10.2.0.1.0 - Production on Mon Nov 13 18:15:09 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: DEVDB (DBID=511198553)

using target database control file instead of recovery catalog 蓝色的没有用 RMAN> configure controlfile autobackup on; /*打开自动备份 备份到默认文件夹*/

RMAN> backup database plus archivelog delete input;/*备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志*/

/*input 会删除3种文件:归档日志、datafile copy还有backup set。也就是对这三种文件在进行备份时可以在备份结束之后把备份源删除。其他种类的不会删除。补充一点,如果是删归档日志:delete input只删除一个dest下的源归档日志 delete all input会把所有归档dest下的相应日志都删掉 */

在 test_d 表空间中创建 mytable 表。

19:01:56 SQL> connect system/oracle@devdb2 Connected.

19:02:01 SQL> create table mytable (col1 number) tablespace test_d; Table created.

在 t1 时间,向 mytable 中插入第一个记录。 19:02:50 SQL> insert into mytable values (1); 1 row created.

19:02:59 SQL> commit;/*提交命令*/ Commit complete.

在 t2 时间,向 mytable 中插入第二个记录。 19:04:41 SQL> insert into mytable values (2); 1 row created.

19:04:46 SQL> commit;

Commit complete.

在 t3 时间,删除 mytable 表。 19:05:09 SQL> drop table mytable; Table dropped.

将 test_d 表空间恢复到某个时间点。 为辅助数据库创建辅助目录。 rac1-> mkdir /u01/app/oracle/aux

RMAN> recover tablespace test_d /*还原命令*/

2> until time \

3> auxiliary destination '/u01/app/oracle/aux'; /*辅助文件暂存地(auxiliary destination)即辅助集所包含的对象在rman transport tablespace命令执行过程中物理存放的位置,执行完之后这些文件会被删除。*/ RMAN> backup tablespace test_d;

RMAN> sql 'alter tablespace test_d online'/*使oracle的tablespace test_d 在线 就是启用*/ 验证恢复结果。

19:15:09 SQL> connect system/oracle@devdb2 Connected.

19:15:16 SQL> select * from mytable; COL1 ---------- 1

前面扯太远了 后面拉回来 还是说 sql的不通 不说rman了 用了一个例子介绍plsql简单语法 set serveroutput on 允许服务器输出 declear 定义局部变量 maxrecords constant int:=100; i int:=1;

begin 运行局部变量 for i in 1..maxrecords loop

本文来源:https://www.bwwdw.com/article/bif2.html

Top