Sql Server和Oracle语法对比

合集下载

oracle和sqlserver查询语句

oracle和sqlserver查询语句

oracle和sqlserver查询语句Oracle和SQL Server是两种常见的关系型数据库管理系统(DBMS),它们在查询语句方面有一些不同之处。

在本文中,我们将一步一步回答关于Oracle和SQL Server查询语句的问题,以帮助您更好地理解它们的区别。

首先,让我们从基本的查询语句开始。

无论是Oracle还是SQL Server,都使用SELECT语句来检索数据。

下面是一个简单的示例查询,从一个名为"employees"的表中选择所有员工的姓名:SELECT name FROM employees;在这个查询中,"name"是要检索的列名,而"employees"是表的名称。

这个查询语句将返回一个包含所有员工姓名的结果集。

在Oracle中,还可以使用表别名来简化查询。

表别名是一个用于替代表名称的临时名称。

例如,我们可以使用表别名"e"来编写上面的查询:SELECT FROM employees e;在SQL Server中,也可以使用表别名。

与Oracle类似,我们可以使用“AS”关键字或直接省略关键字来定义表别名。

下面是一个相同的查询示例:SELECT FROM employees AS e;或SELECT FROM employees e;接下来,让我们来看看在Oracle和SQL Server中如何使用WHERE子句来添加条件筛选。

在Oracle中,WHERE子句用于过滤满足指定条件的行。

以下是一个示例查询,从"employees"表中选择所有薪水大于5000的员工的姓名:SELECT name FROM employees WHERE salary > 5000;在这个查询中,"salary > 5000"是条件表达式,用于指定返回薪水大于5000的员工。

Oracle_MSSQLServrer数据库区别

Oracle_MSSQLServrer数据库区别

Oracle,MSSQL数据库的比较这几天,采用了Oracle数据库和MSSQL Server数据库,虽然各个数据库都采用标准的SQL语句,但是其语法之间还是有一定的差异,现将使用过程用到的各个功能的差异大致罗列一下。

1.关于建表语句的语法1.Oracle中可以使用Varchar2类型,但是MSSQL,Sybase中只能用Varchar类型2.Oracle中可以使用Number(12,2)表示金额,而MSSQL,Sybase中只能用对用的Numeric(12,2)来表示3.Oracle每条建表语句之间用分好;进行分隔,而MSSQL,Sybase中不能出现分好,每个建表语句之间用go进行区分。

分别举例如下:Oracle的建表语句create table t_SYSINFO(F_COMPANYNAME varchar2(60), --银行分行的名称F_Factor Number(12,2), --每年递增的系数值F_ReviseValue Number(12,2) --修正参数);MSSQLServer的建表语句如下:--系统信息表create table t_SYSINFO(F_COMPANYNAME varchar(60), --银行分行的名称F_Factor numeric(12,2), --每年递增的系数值F_ReviseValue numeric(12,2) --修正参数)Go2.关于存储过程的语法1.Oracle的存储过程的的语法和MSSQLServre的语法不一样Oracle的语法如下:Create or Replace Procedure *****( parm1 in varchar,Param2 out varchar)Is--各个变量定义,每个变量之间用逗号分隔Begin--SQL语句End/存储过程的参数之间用逗号隔开,同时用in或out说明参数的输入输出方式,一般用如下格式: param in varchar2——参数输入/输出参数类型.Oracle每个存储过程之间必须用斜杠‘/’进行分隔,以标明每个存储过程的结束(当然当个存储过程的结尾可以没有/,但是多个存储过程一起运行时,必须有/,否则系统会认为只有一个存储过程)Oracle中变量可以直接采用类似Delphi的语法进行赋值,即采用:=的方式Oracle每条语句之间必须用分号;进行分隔Oracle支持异常处理,比如运行某条select语句,其查询结果为空,此时系统会返回异常,存储过程中要捕获异常进行处理Select语句将字段内容赋值采用into的语法格式,例如:select F_Field1,F_Field2 into P_Parm1,P_Parm2 from TableIf语句必须有then,语法if(condition) then begin ****end;elsif begin *** end;else begin *** end;Oracle中日期类型,系统会当成数据类型进行处理,因此,日期可以直接相减,例如:P_date1=to_char(to_date(‘20140404’,’YYYYMMDD’)+10,’YYYYMMDD’);参数的类型转换,一般有to_date,to_char,to_number,函数参数的说明如下:第一个参数为要转换的字符串,第二个参数为转换后的格式,例如:to_char(sysdate,’YYYYMMDD’)转换成年月日的方式的字符串。

SQLserver、Oracle、Mysql语法与用法对比(over)

SQLserver、Oracle、Mysql语法与用法对比(over)
添加唯一约束
alter table表名
add constraint唯一约束名unique (列名)
完全一样
altertable表名addunique(列名)
添加默认约束
alter table表名
add constraint default (值) for列名
完全一样
添加检查约束
alter table表名
add constraint check (列名> 10)
完全一样
添加外键约束
alter table子表
add constraiห้องสมุดไป่ตู้t外键约束名foreign key
(子表的列名) references主表(列名)
on update cascade / on update action
注意:
默认和加on update action表示更新受限
alter table表名Add列名数据库类型
删除表中一列
alter table表名drop column列名
alter table表名drop column列名
修改表现有列
alter table表名alter column列名
新数据库类型大小
alter table表明modify(列名数据类型)
删除约束
加on update cascade表示更新不受限,多项
操作时用逗号隔开
完全一样
添加索引约束
altertable表名addindex索引名(列名)
添加普通索引:
create index索引名ON表名(列名)
添加唯一索引:
create unique索引名ON表名(列名)
删除索引

Oracle和SQLServer的主要区别

Oracle和SQLServer的主要区别
Oracle与 Server的主要区别 Oracle与Sql Server的主要区别
序号 Oracle 1.Oracle的参数文件init.ora是可调的,既我们可以根据数据库的规 模调整Oracle对系统资源的使用情况,以达到最合理的资源分配,让 Oracle达到最佳的性能。因此Oracle的性能优势体现在它的多用户 上,比较适用于访问量和并发用户数大的大型应用系统上。 2.游标是以提高速度全部统一的单项游标,可以允许多用户异步读 取,而且声明比较简单,就一句declare cursor游标名 is select 语句就可以了。 数据库性能 3.Oracle以块为最小存储单位,以区为单位分配空间,用户可以根据 需要自己定义块的大小,且区可以按等额或递增进行分配,这可以大 大减少系统的I/O操作提高数据库的性能。 4.ORACLE中用户可以根据数据需要在创建块时定义填充因子(空闲空 间的百分比)和复用因子(当块的存储数据所占的空间下降到这个百分 比之下时,块才重新标记为可用)。用户可以根据记录变化频率和数 据量的大小设置合适的填充因子和空闲因子。 Oracle的安全可靠性更高: 1.Oracle的数据字典和真实数据是分开存放的,不同的数据分别放在 不同的表空间,而且基表(存储系统参数信息)是加密存储,任何人都 无法访问,只能通过用户可视视图查看。安全性高。 2.在ORACLE里默认只有三个系统用户,ORACLE只能通过注册用户登入 安全性 。 3.Oracle的控制文件记录了数据库文件的物理位置和有效性,在每次 打开Oracle系统都将自动对数据进行验证,查看其有效性,防止数据 的丢失,这体现了Oracle对数据管理的严密性。 4.ORACLE在创建表时用户可以精确定义数据存放的表空间,甚至可以 把一张表分开存放在多个表空间中,这样可以将数据量庞大的表按某 Oralce可以很好地支持Windows、Linux等多种操作系统,跨平台性比 跨平台 较好 Oracle的存储结构是由块、区、段组成,可扩展性好,空间利用率 高,但是操作比较复杂: 1.ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子), 块的大小可设置,这样可降低数据行连接与行迁移的可能性。 2.连续的块组成区,区的分配可以是等额的也可以是自增长的,这样 存储结构的不同 可以减少空间分配次数。 3.Oracle的表可以分为多个段,段由多个区组成,每个段可指定分配 在哪个表空间里,这样大大降低了磁盘争用的可能性。 4.Oracle的数据字典和真实数据是分开存放的,不同的数据分别放在 不同的表空间,而且基表(存储系统参数信息)是加密存储,任何人都 无法访问。只能通过用户可视视图查看。 1.ORACLE中容错类型有三种,分别是预定义错误、非预定义错误、用 户自定义,其中在自定义错误中SQLCODE 错误号、SQLERRM错误描述 是SQL Server没有的。 容错机制 2.Oracle提供了健全的错误机制,用户可以轻松的获得错误位置和错 误原因而加以修改。用户还可以自己定义所须的错误类型,用以检查 逻辑错误。 备份机制 ORACLE提供了7种备份机制,具有联机备份功能 Oracle的日志默认有3个,先写入1号日志,满了后再写入2号日志,2 号满了再写入3号日志,3号满了后Oracle将自动备分1号日志的内 容,然后清空后写入新的日志信息,且Oracle的日志有多路复用功 能,我们可以为日志创建多个镜像,把相同的日志信息同时写入多个 日志文件中,这样可以防止磁盘损坏造成的数据丢失。

Oracle与SQLServer的SQL语法差异总结

Oracle与SQLServer的SQL语法差异总结
Oracle与SQL Server应用差异对比分析
项目
Oracle 10g
SQLServer 2008
备注
存储过程格式
CREATEORREPLACEPROCEDURE存储过程名(参数列表) IS
Begin
---存储过程内容
End存储过程名;
CREATEPROCEDURE存储过程名(参数列表) AS
--存储过程内容
From person
2、流控制语句
流控制与表达式结构很相似,只是结果表达式换成语句块
Case表达式when匹配表达式then {语句块1} else {语句块2} end case;
Eg:
case v_name
when‘张三’then
v_number := 1;
when‘李四’then
v_number:=2;
Eg:
Set @result =‘abcd’
2、通过SQL语句赋值
Select变量=表达式from表
Eg:
Select @code=code,@name=name from sysc01 where id = 1000
语句结束符
SQL语句使用分号;作为语句的结束
SQL语句不需要加分号;作为结束符(加也可)
3、动态存储过程(带入、出参)
Eg:
DECLARE@resultVARCHAR(50);
DECLARE@sqlNVARCHAR(1000);
DECLARE@paraNVARCHAR(200);
SET@sql='p_test @code,@name,@result output'
SET@para='@code varchar(10),@name varchar(10),@result varchar(50) output'

oracle与SQL_SEVER的语法区别

oracle与SQL_SEVER的语法区别
整数类型 INTEGER INT 同为整数类型,存储大小都为4个字节
浮点数类型 FLOAT FLOAT
实数类型 REAL REAL
ORACLE内部函数大全以及与SQLSERVER的区别:
下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数。
ORACLE和SQL语法区别归纳
数据类型比较
类型名称
Oracle
SQLServer比较
字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb
变长字符数据类型 VARCHAR2 VARCHAR Oracle里面最大长度为4kb,SQLServer里面最大长度为8kb
WHEN 'B+' THEN 3.3
WHEN 'B-' THEN 2.7
WHEN 'C' THEN 2
WHEN 'C+' THEN 2.3
WHEN 'C-' THEN 1.7
WHEN 'D' THEN 1
WHEN 'D+' THEN 1.3
WHEN 'D-' THEN 0.7
ELSE 0
列表中最小的字符串 LEAST --------------------N/A
如果为NULL则转换字串 NVL-------------------- ISNULL
日期函数
下面是Oracle支持的日期函数和它们的Microsoft SQL Server等价函数。
函数 Oracle --------------------Microsoft SQL Server

Oracle和SQL_Server的语法区别

Oracle和SQL_Server的语法区别

SQL 语言支持这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。

要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行:1.验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。

进行任何必要的修改。

2.把所有外部联接改为 SQL-92 标准外部联接语法。

3.用相应 SQL Server 函数替代 Oracle 函数。

4.检查所有的比较运算符。

5.用“+”字符串串联运算符代替“||”字符串串联运算符。

6.用 Transact-SQL 程序代替 PL/SQL 程序。

7.把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。

8.用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。

9.把 PL/SQL 触发器转换为 Transact-SQL 触发器。

10.使用 SET SHOWPLAN 语句,优化查询性能。

SELECT 语句Oracle 和 Microsoft SQL Server 使用的 SELECT 语句语法类似。

SQL Server 不支持 Oracle 特定的基于开销的优化程序提示,它必须被删除。

建议使用的技术是,使用 SQL Server 基于开销的优化程序。

有关详细信息,请参见本章后面的“SQL 语句优化”。

SQL Server 不支持 Oracle 的 START WITHUCONNECT BY 子句。

在 SQL Server 中,可以创建完成相同任务的存储过程替代它。

SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。

可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。

在下面示例中,使用 INTERSECT 运算符,用于查找学生登记的所有课程的代码和名称。

ORACLE与SQLSERVER语法区别

ORACLE与SQLSERVER语法区别

ORACLE与SQLSERVER语法区别⼀、数据类型ORACLE与SQL SERVER在数据类型的对⽐如下:SQL SERVER ORACLE数字类型DECIMAL[(P[, S])]NUMBER[(P[, S])]NUMERIC[(P[, S])]NUMBER[(P[, S])]FLOAT[(N)]NUMBER[(N)]INT NUMBERSMALLINT NUMBERTINYINT NUMBERMONEY NUMBER[19,4]SMALLMONEY NUMBER[19,4]字符类型CHAR[(N)]CHAR[(N)]VARCHAR[(N)]VARCHAR2[(N)]⽇期时间类型DATETIME DATESMALLDATETIME DATE其它TEXT CLOBIMAGE BLOBBIT NUMBER(1)⼆、表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法⼤致相同。

主要区别如下:(1) Oracle定义表字段的default属性紧跟字段类型之后,如下:Create table MZ_Ghxx( ghlxh number primay key ,rq date default sysdate not null,….)⽽不能写成Create table MZ_Ghxx( ghlxh number primay key ,rq date not null default sysdate,….)三、存储过程/函数过程与函数的区别函数可以返回⼀个值给调⽤环境;⽽过程不能,过程只能通过返回参数(带“OUT”或“IN OUT”)传回去数据。

SQLSERVER中存储过程的结构⼤致如下CREATE PROCEDURE procedure_name/*输⼊、输出参数的声明部分*/ASDECLARE/*局部变量的声明部分*/BEGIN/*主体SQL语句部分*//*游标声明、使⽤语句在此部分*/ENDORACLE中存储过程的结构⼤致如下CREATE OR REPLACE PROCEDURE procedure_name( /*输⼊、输出参数的声明部分*/ )AS/*局部变量、游标等的声明部分*/BEGIN/*主体SQL语句部分*//*游标使⽤语句在此部分*/EXCEPTION/*异常处理部分*/END ;ORACLE端FUNCTION语法说明CREATE [OR REPLACE] FUNCTION function_name[(argument [{IN | OUT | IN OUT }] ) type,…[(argument [{IN | OUT | IN OUT }] ) typeRETURN return_type {IS | AS}BEGIN…END;四、变量赋值在SQL SERVER语句中⽤如下语句对局部变量赋值(初始值或数据库表的字段值或表达式):“SELECT 局部变量名 = 所赋值(初始值或数据库表的字段值或表达式)”;⽽在ORACLE中,将初始值赋给局部变量时,⽤如下语句:“局部变量名 : = 所赋值(初始值或表达式);” ,将检索出的字段值赋给局部变量时,⽤如下语句:“SELECT 数据库表的字段值 INTO 局部变量名 …” 。

ORACLE与SQL SERVER的SQL使用区别

ORACLE与SQL SERVER的SQL使用区别

Oracle与SQL Server的SQL使用区别整理人:阮淑芳日期:2005-12-15一、数据类型二、自动增长字段以做主键识别2、创建SEQUENCE,将此SEQUENCE与需类ID化的列对应;3、在INSERT语句中对相应列引用其SEQUENCE值:SEQUENCENAME.NEXTVAL三、常用函数3.5其他函数AVGCOUNTMAXMINSUMSTDEVVARISNULL(check_exp,replace_value)CASE AVGCOUNTMAXMINSUMSTDDEVVARIANCENVL(check_exp,replace_value)DECODE1)ISNULL与NVL在MSSQL中ISNULL;在ORACLE中,同样的功能用NVL实现。

2)CASE与DECCODE对某个值进行多个判断分支进行处理.四、常用SQL语法[ELSE{statement|statement_block}] 4>循环语句:WHILEWHILE boolean_condition [{statement|statement_block} ][BREAK][condition]5>RETURN语句用于无条件退出一个批处理、存储过程或触发器;用于存储过程中返回状态值。

LOOP{statement|statement_block};[EXIT[WHEN condition];] END LOOP;B、WHILE循环语句WHILE condition LOOP {statement|statement_block};END LOOP;C、数字式FOR循环语句FOR loop_counter IN[REVERSE]l ow_bound..high_bound LOOP {statement|statement_block};END LOOP;4.3T-SQL中的游标提取循环语句:1)FETCH[NEXT FROM]cursor_na me INTO@variable_1,...@varia ble_n2) WHILE@@FETCH_STATUS=0 BEGINOther_statements FETCH[NEXT FROM]cursor_na me INTO@variable_1,...@varia ble_nEND3)CLOSE cursor_name4.4事务处理语句:1>开始一个事务:BEGIN TRAN[SACTION[transaction_name]]2>提交一个事务:COMMIT TRAN[SACTION[transaction_name]]3>回滚一个事务:ROLLBACK TRAN[SACTION[transaction_name]]4>使用事务保存点:BEGIN TRAN[SACTION[transaction_name]]SAVE TRAN[SACTION]savepoint_nameROLLBACK TRAN[SACTION]savepoint_name在PL/SQL中,事务的开始位置是从前一个事务结束以后执行的第一条SQL语句,或者在连接到该数据库以后所执行的第一条SQL语句。

sql server与oracle的区别

sql server与oracle的区别

疯狂SQL之魔兽争霸本人平时比较沉默,但朋友们都说我很疯狂—疯狂地学习、疯狂地工作。

很久就有写点东西的打算啦,一直懒于打字,近来稍有空闲,决定杜撰此文,献给现些喜欢或不喜欢沉默的朋友。

----自序网上已经有很多SQL与ORACLE的对比,但本人要讲的即不是单纯的SQL,也不是单纯的ORACLE,更不是评价谁好谁坏(意思不大),而是两种数据库之相同和异同,本人曾讲授过SQL与ORACLE的课程,讲SQL时说SQL好,讲ORACLE时又说ORACLE棒,现在终于可以平心而评啦。

估计有人现在会嘿嘿冷笑(又一个误人子弟的骗子),老实说,当初每次讲完课,就有这种感觉—教的人不得其法,学的人不得其道。

说点严肃的事吧,据说比尔与艾里森在洗手间相遇,两个又是拥抱,又是KISS,不多久就吵了起来,比尔对查询分析器(SQL QUERY ANALYZE)赞不经绝口,艾里森嘿嘿冷笑,只说了一句话—SQL PLUS内秀。

言归正传,且听我一一道来1.SQL与ORACLE的内存分配ORACLE的内存分配大部分是由INIT.ORA来决定的,一个数据库实例可以有N种分配方案,不同的应用(OLTP、OLAP)它的配置是有侧重的。

SQL概括起来说,只有两种内存分配方式:动态内存分配与静态内存分配,动态内存分配充许SQL自己调整需要的内存,静态内存分配限制了SQL对内存的使用。

1.002、SQL与ORACLE的物理结构总得讲,它们的物理结构很相似,SQL的数据库相当于ORACLE的模式(方案),SQL的文件组相当于ORACLE的表空间,作用都是均衡DISK I/O,SQL创建表时,可以指定表在不同的文件组,ORACLE则可以指定不同的表空间。

CREATE TABLE A001(ID DECIMAL(8,0)) ON [文件组]--------------------------------------------------------------------------------------------CREATE TABLE A001(ID NUMBER(8,0)) TABLESPACE 表空间注:以后所有示例,先SQL,后ORACLE2.003、SQL与ORACLE的日志模式SQL对日志的控制有三种恢复模型:SIMPLE、FULL、BULK-LOGGED;ORACLE对日志的控制有二种模式:NOARCHIVELOG、ARCHIVELOG。

oracle与sql server的主要用法和区别

oracle与sql server的主要用法和区别
end;
for变量名in变量范围(start..end)
loop

end loop;
setserverouton;
declare
sumofaddint:=0;
intaddint:=0;
begin
forintaddin0..100
loop
sumofadd := sumofadd + intadd;
endloop;
begin
openmycursor(20);
loop
exitwhenmycursor%notfound;
fetchmycursorintoempname , empsal;
在saleCommodity表中生成触发器,在表store中实时更新库存量
createtriggersubtractRest
onsalecommodity
afterinsert
as
begin
declare@sale_quantityint
declare@restint
declare@comidint
fetchmycursorintoempname , empsal;
dbms_output.put_line('员工姓名:'|| empname ||'工资:'|| empsal);
endloop;
closemycursor;
end;
带参数的游标
1.声明游标
cursor(变量名变量类型(注意这里不能填入变量长度))游标名称isselect变量名1,变量名2…from表名
float:8个字节
datetime:8个字节表示时间
char():不足的长度用空格补上

SQLServer与OracleSQL语法差异

SQLServer与OracleSQL语法差异

SQLServer与OracleSQL语法差异以下差异将以SQL Server视⾓阐述1. 在创建函数或存储过程时,定义参数名前需要使⽤@符号1. 可以⽤ALTER PROCEDURE/FUNCTION来对已经存在的存储过程和函数的内容进⾏修改,Oracle的ALTER只可以⽤于重编译或debug。

2. 要进⾏Top-N查询时,应该使⽤SELECT TOP N [column_name]3. 进⾏Top-N查询时,以Top 10为例,如果第11、12条数据与第10条相同,也想将其进⾏输出时,应使⽤SELECT TOP N WITH TIES语句4. 如果要查询前10%的数据,可以使⽤SELECT TOP N PERCENT5. ⽤户变量名使⽤@前缀进⾏定义,⽽Oracle中是使⽤:来作为前缀1. SQL Server中没有dual虚表的概念,如果需要进⾏某函数结果的测试,直接SELECT即可。

2. Oracle捕获异常通常分为预定义和⾃定义异常,使⽤exception和when-then来进⾏捕获和异常信息抛出,⽽SQL Server中使⽤try-catch。

1. 两个数据库函数⼤部分相同,⼩部分不同的按照具体情况百度2. SQL Server中的数据库类似于schema,要使⽤哪个数据库,就使⽤use xx语句,如果要显⽰多个查询结果,则每个语句后跟go3. 做聚合分析时,SQL Server中的是grouping,Oracle中是grouping set4. 如果需要同时显⽰查询结果和⼩计,但是由于字段数量不同,⽆法⽤union显⽰,此时可以使⽤compute(Oracle中没有)1. Oracle中的with xx as后跟查询语句,⽽SQL Server中的CTE应该写成with xx (输出字段) as后跟查询语句2. SQL Server中使⽤游标遍历获取数据时,应使⽤fetch next,⽽Oracle中的是fetch,⽽且SQL Server的游标可以前后滚动;关闭游标时Oracle只需要写Close cursor就会关闭并释放资源,⽽SQL Server还需要DEALLOCATE CURSOR来释放资源。

常用SQL SERVER和ORACLE区别

常用SQL SERVER和ORACLE区别

目录1.还原 (4)1.1ORACLE还原 (4)1.1.1创建表空间及用户 (4)1.2SQL SERVER还原 (5)2.函数 (5)2.1 数字函数 (5)2.1.1绝对值 (5)2.1.2取整数(向上舍入) (5)2.1.3取整数(向下舍入) (6)2.1.4取整数(截取) (6)2.1.5四舍五入 (6)2.1.6 e为底的幂(返回指数值) (6)2.1.7 e为底的对数(返回对数值) (6)2.1.8取平方数 (6)2.1.9取平方根 (7)2.2 数值比较 (7)2.2.1取集合最大值 (7)2.2.2取集合最小值 (7)2.2.3处理NULL值 (7)2.3 字符串函数 (8)2.3.1字符串连接 (8)2.3.2返回子字符串位置 (8)2.3.3返回模糊字串的位置 (8)2.3.4截取字符串 (8)2.3.5字符串替换 (8)2.3.6左边加空格 (9)2.3.7右边加空格 (9)2.4 日期函数 (9)2.4.1取当前日期 (9)2.4.2日期转换 (9)2.4.3取当前时间 (9)2.4.4取当月最后一天 (9)2.4.5获取本周的某一天的日期 (10)2.4.6字符串转换为日期 (11)2.4.7常用日期转换语句 (11)2.5 常用ORACLE与SQL SERVER等价函数 (13)3.语法 (13)3.1 取前多少行数据 (13)3.2 做列增长率 (14)3.2.1 ORACLE脚本 (14)3.2.2 SQL SERVER脚本 (14)3.3 条件 (15)4.ORACLE常用函数大全 (15)4.1.1 CONCAT连接字符串 (15)4.1.2 INSTR(C1,C2,start,appearPosition)返回字符串位置 (15)4.1.3 LENGTH返回字符串长度 (16)4.1.4 LOWER小写转化 (16)4.1.5 UPPER大写转化 (16)4.1.6 RPAD(string,padded_length,[pad_string])在字符串右边粘贴字符 (16)4.1.7 LPAD(string,padded_length,[pad_string])在字符串右边粘贴字符 (16)4.1.8 RTRIM(string1,string2)去除右边字符串 (17)4.1.9 LTRIM(string1,string2)去除右边字符串 (17)4.1.10 TRIM(leading|trailing|both string1 FROM string2)去除指定字符串 (17)4.1.11 SUBSTR(sting,start,length)截取字符串 (17)4.1.12 REPLACE(string1,string2,string3)替换字符串 (17)4.1.13 CEIL取整数(向上舍入) (18)4.1.14 FLOOR取整数(向下舍入) (18)4.1.15 MOD(n1,n2)返回余数 (18)4.1.16 POWER(n1,n2)返回n次方根 (18)4.1.17 ROUND(X,Y)四舍五入 (18)4.1.18 TRUNC(X,Y)返回X按精度Y截取后的值 (19)4.1.19 SIGN(n)返回n的符号 (19)4.1.20 SQRT(n)返回n的根 (20)4.1.21 TO_CHAR格式化函数 (20)4.1.22 SYSDATE取当前日期 (22)4.1.23 ADD_MONTHS增加删除月份 (22)4.1.24 LAST_DAY返回当前日期的最后一天 (23)4.1.25 MONTHS_BETWEEN(date2,date1)返回日期差 (23)4.1.26 NEXT_DAY(date,day)获取日期 (23)4.1.27 GREATEST返回集合最大值 (23)4.1.28 LEAST返回集合最小值 (24)4.1.29 USER返回当前用户名称 (24)4.1.30 UID返回当前用户标识的唯一整数 (24)4.1.31 AVG(DISTINCT|ALL)对所有数求平均数 (24)4.1.32 MAX(DISTINCT|ALL)获取最大值 (25)4.1.33 MIN(DISTINCT|ALL)获取最小值 (25)4.1.34 GROUP BY分组统计 (26)4.1.35 HAVING对分组统计再加限制条件 (26)4.1.36 ORDER BY对查询结果进行排序 (27)4.1.37 COUNT统计累计行数 (27)4.1.38 DENSE_RANK (27)4.1.39 FRIST和LAST (28)4.1.40 FIRST_VALUE (29)4.1.41 LAST_VALUE (30)4.1.42 LAG获取增长率 (31)4.1.43 LEAD与LAG相反 (32)4.1.44 NTILE (33)4.1.45 PERCENT_RANK() (34)4.1.46 RATIO_TO_REPORT (35)4.1.47 ROW_NUMBER (36)4.1.48 SUM返回累计和 (37)4.1.49 TRANSLATE (string,from_str,to_str) (38)4.1.50 DECODE[实现if...then逻辑] . (38)4.1.51 CASE[实现SWITH...THEN逻辑] (39)4.1.52 NVL空值处理函数 (39)4.1.53 ABS返回绝对值 (39)5.查询优化 (39)5.1.1数据库方面 (39)5.1.2 SQL语句方面 (40)6.索引 (42)6.1.1 ORACLE (42)6.1.2 SQL SERVER (45)7.分区 (47)7.1.1 ORACLE (47)7.1.2 SQL SERVER (52)1.还原1.1ORACLE还原1.1.1创建表空间及用户1创建表空间语法CREATE bigfile TABLESPACE LTLOBDATA01 DATAFILE 'D:\DATABASE\LTLOBDATA01.dbf' SIZE 1000M autoextend on next 500M MAXSIZE UNLIMITED;2创建用户语法:create user EFMCS_JLP_2014 (用户名‘EFMCS_JLP_2014’)identified by 123 (密码:123)default tablespace EFMCS (默认表空间)temporary tablespace TEMP;3 给用户授权grant connect to EFMCS_JLP_2014;grant dba to EFMCS_JLP_2014;grant resource to EFMCS_JLP_2014;grant create materialized view to EFMCS_JLP_2014;grant create session to EFMCS_JLP_2014;grant create table to EFMCS_JLP_2014;grant global query rewrite to EFMCS_JLP_2014;grant query rewrite to EFMCS_JLP_2014;grant select any table to EFMCS_JLP_2014;grant unlimited tablespace to EFMCS_JLP_2014;4两种还原方式imp标准还原,命令:imp JB_FASP/admin@orcl full=y log=d:\JB_FASP_2015.log;命令:imp cqsky2019/123123@localhost/orcl file=D:\111\marry.dmp full=y其中FROMUSER代表来源用户,TOUSER代表被还原用户,FILE代表需要还原的数据备份名称,LOG代表还原日志。

Oracle和SQL Server的一些区别(函数和存储过程)

Oracle和SQL Server的一些区别(函数和存储过程)

Oracle和SQL Server的一些区别(函数和存储过程)函数SQLServer和Oracle的常用函数对比1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.23466.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 18.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 8112.取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -1----------数学函数14.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl--------数值间比较21.求字符序号S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22') ¦ ¦33 value from dual23.子串位置 --返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置 --返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') valueO:oracle没发现,但是instr可以通过第四霾问 刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S:没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换 lower,upper29.单词首字母大写S:没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dualSQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高--------------日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和 DATENAME 函数(第一个参数决定)O:to_char函数第二个参数决定参数---------------------------------下表需要补充year yy, yyyyquarter qq, q (季度)month mm, m (m O无效)dayofyear dy, y (O表星期)day dd, d (d O无效)week wk, ww (wk O无效)weekday dw (O不清楚)Hour hh,hh12,hh24 (hh12,hh24 S无效)minute mi, n (n O无效)second ss, s (s O无效)millisecond ms (O无效)----------------------------------------------40.当月最后一天S:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S:不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加—夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT 太平洋标准时间YST YDT YUKON标准时间Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数 Oracle Microsoft SQL Server把字符转换为ASCII ASCII ASCII字串连接 CONCAT (expression + expression)把ASCII转换为字符 CHR CHAR返回字符串中的开始字符(左起) INSTR CHARINDEX 把字符转换为小写 LOWER LOWER把字符转换为大写 UPPER UPPER填充字符串的左边 LPAD N/A清除开始的空白 LTRIM LTRIM清除尾部的空白 RTRIM RTRIM字符串中的起始模式(pattern) INSTR PATINDEX 多次重复字符串 RPAD REPLICATE字符串的语音表示 SOUNDEX SOUNDEX重复空格的字串 RPAD SPACE从数字数据转换为字符数据 TO_CHAR STR子串 SUBSTR SUBSTRING替换字符 REPLACE STUFF将字串中的每个词首字母大写 INITCAP N/A翻译字符串 TRANSLATE N/A字符串长度 LENGTH DATELENGTH or LEN列表中最大的字符串 GREATEST N/A列表中最小的字符串 LEAST N/A如果为NULL则转换字串 NVL ISNULL日期函数函数 Oracle Microsoft SQL Server日期相加 (date column +/- value) or ADD_MONTHS DATEADD两个日期的差 (date column +/- value) or MONTHS_BETWEEN DATEDIFF当前日期和时间 SYSDATE GETDATE()一个月的最后一天 LAST_DAY N/A时区转换 NEW_TIME N/A日期后的第一个周日 NEXT_DAY N/A代表日期的字符串 TO_CHAR DATENAME代表日期的整数 TO_NUMBER(TO_CHAR)) DATEPART日期舍入 ROUND CONVERT日期截断 TRUNC CONVERT字符串转换为日期 TO_DATE CONVERT如果为NULL则转换日期 NVL ISNULL转换函数函数 Oracle Microsoft SQL Server数字转换为字符 TO_CHAR CONVERT字符转换为数字 TO_NUMBER CONVERT日期转换为字符 TO_CHAR CONVERT字符转换为日期 TO_DATE CONVERT16进制转换为2进制 HEX_TO_RAW CONVERT 2进制转换为16进制 RAW_TO_HEX CONVERT其它行级别的函数函数 Oracle Microsoft SQL Server返回第一个非空表达式 DECODE COALESCE 当前序列值 CURRVAL N/A下一个序列值 NEXTVAL N/A如果exp1 = exp2, 返回null DECODE NULLIF 用户登录账号ID数字 UID SUSER_ID用户登录名 USER SUSER_NAME用户数据库ID数字 UID USER_ID用户数据库名 USER USER_NAME当前用户 CURRENT_USER CURRENT_USER用户环境(audit trail) USERENV N/A在CONNECT BY子句中的级别 LEVEL N/A合计函数函数 Oracle Microsoft SQL Server Average AVG AVGCount COUNT COUNTMaximum MAX MAXMinimum MIN MINStandard deviation STDDEV STDEV or STDEVP Summation SUM SUMVariance VARIANCE VAR or VARPOracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:EXTRACT(YEAR FROM 日期)存储过程一.多表连接查询,更新存储过程Sql存储过程ALTER PROCEDURE [dbo].[ GetEvent]@SCSWId nvarchar(20)= null ,@ToDate DATETIME,@FromDate DATETIMEASSELECT NOTES.NOTE_ID,NOTES.NOTE,SCSW_CALENDAR.DATE_TIMEFROM SCSW_CALENDARLEFT OUTER JOIN NOTES ON SCSW_CALENDAR.NOTE_ID=notes.note_idWHERE SCSW_CALENDAR.SCSW_ID = SCSWIdORDER BY Patient.PatientIdOracel存储过程1.查询数据的存储过程PROCEDURE GetEvent(SCSWId IN VARCHAR2, FromDate IN DATE, ToDate IN DATE, refOut OUT refcursor)ISBEGINOPEN refOut FORselect NOTES.NOTE_ID,NOTES.NOTE,SCSW_CALENDAR.DATE_TIMEfrom SCSW_CALENDARleft join NOTES on SCSW_CALENDAR.NOTE_ID=notes.note_idwhere SCSW_CALENDAR.SCSW_ID = SCSWIdAND SCSW_CALENDAR.DATE_TIME >= FromDateAND SCSW_CALENDAR.DATE_TIME < ToDateorder by SCSW_CALENDAR.DATE_TIME;END GetEvent;2.更新数据的存储过程:procedure UpdateArticlesubmodel(ArticleSubID number,ArticleTitle nvarchar2,ArticleKeyWord nvarchar2, ArticleContent CLOB,CreatePerson nvarchar2,ChangeDate date,SetTop number,ArticleSubStyleID number,Checked number)asbeginupdate "ArticleSubModel"set "ArticleTitle"=ArticleTitle, "ArticleKeyWord"=ArticleKeyWord, "ArticleContent"=ArticleContent, "CreatePerson"=CreatePerson, "CreateDate"=ChangeDate,"SetTop"=SetTop, "ArticleSubStyleID"=ArticleSubStyleID, "Checked"=Checkedwhere "ArticleSubID"=ArticleSubID; commit;Exception when others thenrollback;end UpdateArticlesubmodel;3.删除数据的存储过程procedure DeleteArticlesubmodel(ArticleSubID number)asbegindelete from "ArticleSubAccessories"where "ArticleSubID"=ArticleSubID;delete from "ArticleSubModel"where "ArticleSubID"=ArticleSubID;commit;Exception when others thenrollback;end DeleteArticlesubmodel;编后:如果您认为有侵权的地方,请来信说明,本人将立即删去。

SqlServer与Oracle语法差异

SqlServer与Oracle语法差异
select字段名as别名from dual
13
Oracle中没有selectsysdateasnowDate的写法,正确的应该是加个虚表dual
selectsysdateasnowDatefrom dual
14
Oracle中,字段名,表名,别名,索引名,视图名等名称的长度不能超过30个字符
15
Oracle中,字段名都是大写的,即使select语句中是小写,得到的结果也是大写。因此,select到DataTable中后,binding到wpf时如果大小写不同,会绑定失败。在DataTable中分组和排序,也会失败。因此,尽量将DataTable中的字段名称改为大写。
{
if (Global.CacheServerConfiger.IsOracle)
{
_sqlserverSql= _sqlserverSql.Trim();
if (!_sqlserverSql.EndsWith(";"))
{
_sqlserverSql+= ";";
}
_sqlserverSql= _sqlserverSql.Replace("\r\n", " ").Replace("\n", " ");
4
sql语句中的+,改为||
5
Oracle中,在sql中做除法时,需要进行以下操作,否则c#中会算术溢出
round(count(*)/(cast(3 as float)), 28) --cast(3 as float)是为了和sqlserver保持一致,28是最大精度,不能大于28
6
日期在SqlServer中可以按照字符串操作,但在Oracle中不行

深度对比Oracle与SQLServer

深度对比Oracle与SQLServer

深度对比Oracle与SQL Server1.概述1.1.产品特点对比开放性SQL Server 只能在Windows 上运行,没有丝毫的开放性,操作系统的稳定对数据库是十分重要的。

Windows9X系列偏重于桌面应用,NT server只适合中小型企业。

而且Windows平台的可靠性,安全性和伸缩性是非常有限的。

它不象UNIX那样久经考验,尤其是在处理大数据量的关键业务时。

Oracle 能在所有主流平台上运行(包括 Windows)。

完全支持所有的工业标准。

采用完全开放策略。

可以使客户选择最适合的解决方案。

对开发商全力支持。

DB2 能在所有主流平台上运行(包括Windows)。

最适于海量数据。

DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.可伸缩性、并行性SQL server并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。

Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展WindowsNT的能力,提供高可用性和高伸缩性的簇的解决方案。

如果WindowsNT不能满足需要, 用户可以把数据库移到UNIX中。

DB2具有很好的并行性。

DB2把数据库管理扩充到了并行的、多节点的环境。

数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。

数据库分区有时被称为节点或数据库节点。

安全性SQL server 没有获得任何安全证书。

Oracle Server 获得最高认证级别的ISO标准认证。

DB2 获得最高认证级别的ISO标准认证。

性能SQL Server 多用户时性能不佳Oracle 性能最高,保持WindowsNT下的TPC-D和TPC-C的世界记录。

DB2 适用于数据仓库和在线事物处理,性能较高。

客户端支持及应用模式SQL Server C/S结构,只支持Windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接DB2 跨平台,多层结构,支持ODBC,JDBC等客户操作简便SQL Server 操作简单,但只有图形界面Oracle 较复杂,同时提供GUI和命令行,在WindowsNT和UNIX下操作相同DB2 操作简单,同时提供GUI和命令行,在WindowsNT和UNIX下操作相同使用风险SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。

Oracle与SQL-Server的SQL语法差别共34页文档

Oracle与SQL-Server的SQL语法差别共34页文档
SQL Server
select getdate() mycolumn into mytable;
Oracle
insert into mytable (mycolumn) values(sysdate);
Inserts
SQL Server
Insert mytable values(‘more text’);
Delete with Second From Clause
from sales s;
SubQueries in Place of Columns
Oracle
SELECT year, DECODE( quarter, 1, amount, 0 ) q1, DECODE( quarter, 2, amount, 0 ) q2, DECODE( quarter, 3, amount, 0 ) q3, DECODE( quarter, 4, amount, 0 ) q4 FROM sales s;
Oracle
Insert into mytable values(‘more text’);
Updates
SQL Server
update mytable set mycolumn=myothertable.mycolumn
from mytable,myothertable where mytable.mycolumn like 'MY%' and myothertable.myothercolumn='some text';
Oracle与SQL-Server的SQL语法差 别
11、用道德的示范来造就一个人,显然比用法律来约束他更有价值。—— 希腊
12、法律是无私的,对谁都一视同仁。在每件事上,她都不徇私情。—— 托马斯
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1create table SYS.CMS_CASE_FEE(CASE_ID NUMBER(15,0) NOT NULL,SOURCE_KIND nvarchar2(1) NOT NULL,SEQ_NO NUMBER(15,0) NOT NULL ,FEE_KIND1 nvarchar2(5) NULL,FEE_AMT1 NUMBER(15,1) NULL,FEE_KIND2 nvarchar2(5) NULL,FEE_AMT2 NUMBER(15,1) NULL,FEE_KIND3 nvarchar2(5) NULL,FEE_AMT3 NUMBER(15,1) NULL,PRIMARY KEY(CASE_ID,SEQ_NO,SOURCE_KIND) )2栏位自增:1 创建表(create table)create table test(autoid number(10,0)......CONSTRAINT test PRIMARY KEY(autoid))2 建立序列(create sequence)create sequence seq_test_autoid increment by 1 start with 1 3 插入数据(insert data)insert into test values(seq_test_autoid.nextval,......)3Oracle 中的表名和列名可以包括字母,数字和下划线,名字长度为1-30个字符.4Oracle 中定义变量及变量使用:declarevar1 number;var2 nvarchar2(10):='test';--初始化var3 nvarchar2(10);begin--处理语句select 'hello' into var3 from dual;var3:='test';insert into tablename(......) values(var1,var2,var3); end;中传多个SQL语句到Oracle中执行:begin--执行语句insert into tablename(......) values(var1,var2,var3); insert into tablename(......) values(var1,var2,var3); end;6在执行insert语句时,如果db中的栏位类型为data类型,不能像sql server中那样insert字符类型的数据,要将此转化为date类型,才可进行新增操作如:sql server:insert into table1(clomn1,clomn2)values(12,'2006/01/02')orcal:insert intotable1(clomn1,clomn2)values(12,to_date('2006/01/02','yyyy/mm/dd'))0.07Oracle 中文占3个字节问题:1 存在表中的欄位類型為Nvarchar2的中文还是占2个字节.select lengthb(strword) from word_test --结果:8( 表word_test存有一条记录,strword2栏位值位:"汉汉汉汉",lengthb()为取字节长度函数).2 存在表中的欄位類型為varchar2(varchar)的中文还是占3个字节.select lengthb(strword) from word_test --结果:12( 表word_test存有一条记录,strword2栏位值位:"汉汉汉汉",lengthb()为取字节长度函数).3 字符串中中文占3个字节.select lengthb('汉汉汉汉') from word_test --结果:124 按字符长度处理栏位(如:SUBSTR()等函数)处理栏位和中文字串时处理方式一样.select SUBSTR('汉汉汉汉',1,3) from dual --结果:汉汉汉select SUBSTR(strword,1,3) from word_test --结果:汉汉汉5 按字节长度处理栏位(如:SUBSTRB()按字节截取)处理栏位和中文字串时方式有差异:select SUBSTRB('汉汉汉汉',1,4) from dual --结果:汉select SUBSTRB(strword,1,4) from word_test --结果:汉汉(strword欄位類型位Nvarchar2)select SUBSTRB(strword,1,4) from word_test --结果:汉汉(strword 欄位類型位varchar2(varchar))8grant create any table to cms --解決建立臨時表的權限問題create or replace procedure cms.lucytest4 isbeginexecute immediate 'CREATE GLOBAL TEMPORARY TABLE lucyT4 ( pid nvarchar2(3),pname nvarchar2(10) ) ON COMMIT delete ROWS';execute immediate 'insert into lucyT4 values(''001'',''A1'')'; execute immediate 'SELECT * FROM lucyT4';--execute immediate 'DELETE * FROM lucyT4';execute immediate 'DROP TABLE lucyT4';end;gobegincms.lucytest4();end;9查询表中TREE_ID栏位最大的值,然后加1,产生最大的ID:select right('00000' + cast((select isnull(max(TREE_ID),0) + 1 from CMS_Problem_Data) as varchar),5) AS TREE_ID转换方式:SELECTSUBSTR('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1),LENGTH('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1))-4,LENGTH('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1))) AS TREE_IDFROMCMS_PROBLEM_DATA10栏位排序:SQL Server 以某栏位升序排序,则会将栏位值为"Null"的数据排在最前面. 而 Oracle 以某栏位升序排序,则会将栏位值为"Null"的数据排在最后面.SQL Server中的查询条件不区分全角,半角;Oracle中的查询条件区分全角,半角.如条件:WHERE USER_ID = '730097'或WHERE USER_ID = '730097'13Oracle中的保留字不可以用作 表名或表的栏位名称.(比如保留字:LEVEL)可以通过加双引号解决该问题("保留字"),但是加上 "" 后表名或表的栏位名称就会区分大小写.而且以后使用该表或表的栏位必须加上"",会给程式撰写带来麻烦.14左连接:select count(*) from CMS_COLLATERAL left join CMS_COLLATERAL_STATUS on CMS_COLLATERAL.COLL_ID = CMS_COLLATERAL_STATUS.COLL_ID或select count(*) from CMS_COLLATERAL ,CMS_COLLATERAL_STATUSwhere CMS_COLLATERAL.COLL_ID = CMS_COLLATERAL_STATUS.COLL_ID(+)位名 称用“[]”括起来2 SYS :为表所在的tablespace(可以不写)3 有默认值的栏位定义方式为: 栏位名称 栏位类型 DEFAULT (value)null/not null.Colton2007/2/7 Oracle 中可通过为建立表的序列实现栏位自增.Colton2007/2/8Colton2007/2/8注意:1 每个语句后面都有";".2 end 后面加 ";",declare/begin 不加Colton2007/2/15注意:1 目前,测出执行多个select语句不可以.2注意 ";" 使用.Colton2007/2/15Colton2007/2/15 Colton在儲存過程中建立臨時表的撰Lucy2007/3/5Gary2007/2/12Gary2007/2/14Gary2007/2/26ColtonColton Colton。

相关文档
最新文档