ORACLE和SQL语法区别归纳(

合集下载

ORACLE与SQL区别与联系

ORACLE与SQL区别与联系

Oracle与sql区别一,字串连接Oracle使用两个竖线符号(||)来作为字串连接操作符,而SQL Server则使用加号(+)。

二,模式匹配SQL Server的LIKE关键字提供了有用的通配符搜索功能,这个功能在Oracle中不支持除了所有的RDBMS都支持的(%)和(_)通配符以外,SQL Server还支持([])和([^])通配符。

([])字符用来查询在一个范围内的所有单个字符。

例如,如果你需要查询包含一个从a到f的字符的数据,三,性能SQL多用户时性能不佳,Oracle在所有的数据库中性能最高,在多用户性能也很强大,执行查询速度也非常快,四,游标的区别Oracle在使用SELECT语句时总是需要游标,不管从数据库中请求多少行。

在Microsoft SQL Server,SELECT语句并不把在返回客户的行上附加游标作为缺省的结果集合。

这是一种返回数据给客户应用程序的有效的方法。

SQL Server为游标函数提供了两种接口。

当在Transact-SQL批处理或者存储过程中使用游标的时候,SQL语句可用来声明、打开、和从游标中抽取,就像定位更新和删除一样。

当使用来自DB-Library、ODBC、或者OLEDB程序的游标时,SQL Server,显式的调用内建的服务器函数来更有效的处理游标。

当从Oracle输入一个PL/SQL过程时,首先判断是否需要在Transact-SQL中采用游标来实现同样的功能。

如果游标仅仅返回,组行给客户程序,就使用非游标的SELECT语句来返回缺省的结果集合。

如果游标用来从行中一次取得一个数据给本地过程变量,你就必须在Transact-SQL中使用游标。

五,语句块Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块。

Transact-SQL不需要在DECLARE语句后使用一个语句块。

SQL与ORACLE的区别

SQL与ORACLE的区别

基本定义1、如果列别名有大小写之分,并包含特殊字符或空格,那么这样的别名必须用双引号引住;2、日期数据的默认显示格式为“DD-MON-YY”,如果希望使用其他格式显示,那么必须调用TO_CHAR函数进行转换。

例:select ename,TO_CHAR(hiredate,’yyyy-mm--dd’) from emp3、使用算术表达式当执行查询操作时,可以在数字列上使用算术表达式,其中乘、除的优先级要高于加减。

如要改变优先级,可以使用括号;4、NVL函数用于将NULL转变为实际值,语法为NVL(表达式1,表达式2),如果表达式1为NULL,则返回表达式2,;如果表达式1不是NULL,则返回表达式1.参数表达式1,表达式2可以是任意数据类型,但二者的数据类型必须要匹配。

例:select ename,sal,comm,sal+nvl(comm,0) from emp;5、在where条件中使用数字值当在where条件中使用数字值时,既可以使用单引号引住数字值,也可以直接引用数字值。

6、在where条件中使用日期值必须要用单引号引住,并且日期值必须要符合日期显示格式。

如果日期值不符合默认日期格式,那么必须使用TO_DATE函数进行转换;7、在where条件中使用between…..and操作符用于指定特定范围条件,在between操作符后指定较小的一个值,在and操作符后指定较大的一个值;例:select * from emp where sal between 100 and 1000;8、在where条件中使用in操作符用于执行列表匹配操作。

当列或表达式结果匹配于列表中的任一个值时,条件字句返回true。

例:select * from emp where sal in(100,200);9、使用order by字句在执行查询操作时,默认情况下会按照数据插入的先后顺序来显示数据。

但在实际应用中经常需要对数据进行排序,以显示更直观的数据。

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与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语法区别归纳

ORACLE和SQL语法区别归纳

ORACLE和SQL语法区别归纳数据类型比较类型名称OracleSQLServer比较字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb变长字符数据类型 VARCHAR2 VARCHAR Oracle里面最大长度为4kb,SQLServer里面最大长度为8kb根据字符集而定的固定长度字符串 NCHAR NCHAR 前者最大长度2kb后者最大长度4kb根据字符集而定的可变长度字符串 NVARCHAR2 NVARCHAR 二者最大长度都为4kb日期和时间数据类型 DATE 有Datetime和Smalldatetime两种在oracle里面格式为DMY在SQLSerser里面可以调节,默认的为MDY数字类型 NUMBER(P,S) NUMERIC[P(,S)] Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。

而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。

数字类型 DECIMAL(P,S) DECIMAL[P(,S)] Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。

而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。

整数类型 INTEGER INT 同为整数类型,存储大小都为4个字节浮点数类型 FLOAT FLOAT实数类型 REAL REALORACLE内部函数大全以及与SQLSERVER的区别:下面是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等价函数。

Oracle和SQLServer的语法区别

Oracle和SQLServer的语法区别

Oracle和SQLServer的语法区别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 子句,实现相同的结果。

Oracle与SQL的区别

Oracle与SQL的区别

Oracle与SQL的区别着信息技术的飞速发展,数据处理不仅在数量上要求越来越大,而且在质量上也要求越来越高。

Oracle数据库在大多数企业中受到广泛使用,而SQL Server数据库也因为和Windows的联系,在企业中的使用也是非常广泛。

操作系统的稳定对数据库来说是十分紧要的,在数据库可操作平台上,Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案。

客户可以利用很多种第三方应用程序、工具。

对开发商来说是很大的支持。

而SQL Server却只能在Windows上运行了,这个就显得比较单调了,但SQL Sever在Window平台上的表现,和Wind ows操作系统的整体结合程度,使用方便性,和Microsoft开发平台的整合性都比Oracle强的很多。

但Windows操作系统的稳定性及可靠性大家是有目共睹的,再说Microsoft公司的策略目标是将客户都锁定到Windows平台的环境当中,只有随着Windows性能的改善,S QL Server才能进一步提高。

从操作平台这点上Oracle是完全优胜于SQL Server的了。

从资料上可以看到,Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证。

这方面证明了Oracle的安全性是高于SQL Server的。

购买一个产品,首先考虑的当然是产品的性能了,当考虑性能的同时当然少不了究竟要花多少钱在这产品也是个很关键的问题。

要建立并运行一个数据库系统。

不仅仅包含最初购置软件、硬件的费用,还包含了培训及以后维护的费用。

Orcale数据库的价格是远比SQL Server数据库要高,为什么Oracle数据库比SQL Serve r数据库价格上要高出那么多,一方面Oracle的初始花费相对较高,特别是在考虑工具软件的时候,Oracle很多工具软件需要另外购买,与Microsoft提供免费的SQL Server工具软件相比,Oracle更显价格的不菲。

Oracle和SQLServer语法区别

Oracle和SQLServer语法区别

1.基础语法1.1.时间函数●获取当前日期Oracle:sysdate;SQLSserver:getdate();●转换成字符串Oracle:to_char(sysdate,'yyyy-MM-dd HH24:mi:ss ')SQLSserver:Convert(varchar(19),getdate(),120)●相加/相减Oracle:add_months(sysdate,1)--当前日期加一月sysdate+21---当前日期加21天add_months(sysdate,12);sysdate+interval '1' year---加一年(year)interval 也可以加月(month)/日(day)extract(year from 时间) 或者to_char(时间,'yyyy')--取回日期的指定部分,extract只限年月日SQLSserver:1.2.Oracle中insert into select和select into的用法(异常0RA-00905:missing keyword的解决)两张表进行数据的拷贝,最常用的拷贝语句是:insert into select 和 select into from但是请绝对的注意:在Oracle中select into from不可以使用-----原因很简单:select into 是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的异常!但是可以用create table select代替该功能!!!具体参考下面测试代码!但是在Sql Server中可以正常使用。

先做个小测试:-- 建表create table test1(id number primary key,testname varchar2(20),createtime date,falg varchar2(10));create table test2(id number primary key,testname varchar2(20),createtime date,falg varchar2(10));-- 插入测试数据insert into test1 values(1,'测试数据1....1',sysdate-2,'N');insert into test1 values(2,'测试数据1....2',sysdate-2,'N');insert into test1 values(3,'测试数据1....3',sysdate-2,'N'); commit;-- 使用insert into select 拷贝数据(注意红色部分,可以自动生成id 序列值)insert into test2(id,testname,createtime,falg)select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1;-- 使用 create table select 创建被拷贝数据(注意要删除test2表先)create table test2 as select t1.id,t1.testname,t1.createtime,t1.falg from test1 t1;-- select into from 不可以,抛异常select t1.id,t1.testname,t1.createtime,t1.falg intotest2(id,testname,createtime,falg)from test1 t1;-- PL/SQL language 中select into赋值语句的测试使用create or replace procedure test1_prodisaa varchar2(100);beginselect t1.testname into aa from test1 t1 where id=1;dbms_output.put_line('t1.testname= '|| aa);end;总结:数据拷贝,建议使用insert into select;使用insert into select时如果对拷贝表生成id序列值,需要在select中以查询出的形式从sequence中查询出,再插入拷贝表;比如:insert into test2(id,testname,createtime,falg)select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1;典型从test1表查询出数据插入test2表,test2要自动插入id,看上面代码,id要在select中先从sequence中查询出了!!Oracle函数问题,报(ORA-01422: 实际返回的行数超出请求的行数。

【IT专家】ORACLE与SQL SERVER语法区别 2

【IT专家】ORACLE与SQL SERVER语法区别 2

[(argument [{IN | OUT | IN OUT }] ) type,

[(argument [{IN | OUT | IN OUT }] ) type
RETURN return_type {IS | AS}
BEGIN
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
ቤተ መጻሕፍቲ ባይዱ
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
将检索出的字段值赋给局部变量时,用如下语句:
“SELECT 数据库表的字段值 INTO 局部变量名…”。
五、常用函数比较(以下的 exp 为 expression 的缩写)
Stuff(char_exp1,start,length,
Char_exp2)
Translate(str_exp,from_str,to_str)
/*输入、输出参数的声明部分*/
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
AS
DECLARE
/*局部变量的声明部分*/
BEGIN
/*主体 SQL 语句部分*/
/*游标声明、使用语句在此部分*/
END
ORACLE 中存储过程的结构大致如下
CREATE OR REPLACE PROCEDURE procedure_name
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
ORACLE 与 SQL SERVER 语法区别 2
二、表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX) 在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX 时,SQL SERVER 与 ORACLE 的语法大致相同。主要区别如下: (1)Oracle 定义表字段的 default 属性紧跟字段类型之后,如下: Create table MZ_Ghxx ( ghlxhnumber primay key , rqdatedefault sysdate not null, …. ) 而不能写成 Create table MZ_Ghxx ( ghlxhnumber primay key , rqdatenot null default sysdate, …. ) 三、存储过程/函数 过程与函数的区别 函数可以返回一个值给调用环境;而过程不能,过程只能通过返回参数(带 “OUT”或“IN OUT”)传回去数据。 SQLSERVER 中存储过程的结构大致如下 CREATE PROCEDURE procedure_name

sql与oracle的区别

sql与oracle的区别

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

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

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,后ORACLE003、SQL与ORACLE的日志模式SQL对日志的控制有三种恢复模型:SIMPLE、FULL、BULK-LOGGED;ORACLE对日志的控制有二种模式: NOARCHIVELOG、ARCHIVELOG。

SQL的SIMPLE相当于ORACLE 的NOARCHIVELOG,FULL相当于 ARCHIVELOG,BULK-LOGGED相当于ORACLE大批量数据装载时的NOLOGGING。

经常有网友抱怨SQL的日志庞大无比且没法处理,最简单的办法就是先切换到SIMPLE模式,收缩数据库后再切换到FULL,记住切换到FULL 之后要马上做完全备份。

004、SQL与ORACLE的备份类型SQL的备份类型分的极杂:完全备份、增量备份、日志备份、文件或文件组备份;ORACLE 的备份类型就清淅多啦:物理备份、逻辑备份;ORACLE的逻辑备份(EXP)相当于SQL 的完全备份与增量备份,ORACLE的物理备份相当于SQL的文件与文件组备份。

Oracle中的Case与Sql的Case对比

Oracle中的Case与Sql的Case对比

Oracle中的Case与Sql的Case对⽐区别在与Case后的expression和End后⾯的as表达式最明显--oracle的select t_CX_Orders.*,case when FIsSendMail=1then FFILEPATHelse'.'end DownLoadPathfrom t_CX_Orderswhere FUserID='AAA613'order by FInnerCode desc--sql的SELECT au_fname, au_lname,CASE stateWHEN'CA'THEN'California'WHEN'KS'THEN'Kansas'WHEN'TN'THEN'Tennessee'WHEN'OR'THEN'Oregon'WHEN'MI'THEN'Michigan'WHEN'IN'THEN'Indiana'WHEN'MD'THEN'Maryland'WHEN'UT'THEN'Utah'END AS StateNameFROM pubs.dbo.authorsORDER BY au_lnameDECODE is considered the most powerful function in Oracle. Oracle 8i release introduced the CASE expression. The CASE expression can do all that DECODE does plus lot of other things including IF-THEN analysis, use of any comparison operator and checking multiple conditions, all in a SQL query itself. Moreover, using the CASE function, multiple conditions provided in separate SQL queries can be combined into one, thus avoiding multiple statements on the same table (example given below). The function is available from Oracle 8i onwards.Basic syntaxCASE expression syntax is similar to an IF-THEN-ELSE statement. Oracle checks each condition starting from the first condition (left to right). When a particular condition is satisfied (WHEN part) the expression returns the tagged value (THEN part). If none of the conditions are matched, the value mentioned in the ELSE part is returned. The ELSE part of the expression is not mandatory-- CASE expression will return null if nothing is satisfied.case when <condition> then <value>when <condition> then <value>...else <value>endExamplesThe following examples will make the use of CASE expression more clear.E.g.: Returning categories based on the salary of the employee.select sal, case when sal < 2000 then 'category 1'when sal < 3000 then 'category 2'when sal < 4000 then 'category 3'else 'category 4'endfrom emp;E.g.: The requirement is to find out the count of employees for various conditions as given below. There are multiple ways of getting this output. Five different statements can be written to find the count of employees based on salary and commission conditions, or a single select having column-level selects could be written.select count(1)from empwhere sal < 2000and comm is not null;select count(1)from empwhere sal < 2000and comm is null;select count(1)from empwhere sal < 5000and comm is not null;select count(1)from empwhere sal < 5000and comm is null;select count(1)from empwhere sal > 5000;(or)select (select count(1)from empwhere sal < 2000and comm is not null) a,(select count(1)from empwhere sal < 2000and comm is null) b,from empwhere sal < 5000and comm is not null) c,(select count(1)from empwhere sal < 5000and comm is null) d,(select count(1)from empwhere sal > 5000) efrom dualWith CASE expression, the above multiple statements on the same table can be avoided.select count(case when sal < 2000 and comm is not null then 1else nullend),count(case when sal < 2000 and comm is null then 1else nullend),count(case when sal < 5000 and comm is not null then 1else nullend),count(case when sal < 5000 and comm is null then 1else nullend),count(case when sal > 5000 then 1else nullend)from emp;(or)select count(case when sal < 2000 and comm is not null then 1end) cnt1,count(case when sal < 2000 and comm is null then 1end) cnt2,count(case when sal < 5000 and comm is not null then 1end) cnt3,count(case when sal < 5000 and comm is null then 1end) cnt4,count(case when sal > 5000 then 1end) cnt5from emp;E.g.: CASE expression can also be nested.select (case when qty_less6months < 0 and qty_6to12months < 0 then(case when season_code in ('0', '1', '2', '3', '4') then 'value is negative'else 'No stock'end)when qty_1to2years < 0 and qty_2to3years < 0 then(case when season_code in ('A', 'B', 'C', 'D', 'E') then 'value is negative'else 'No stock'end)else 'Stock Available'end) stock_checkfrom jnc_lots_ageing_mexx_asofwhere rownum < 20and qty_less6months < 0 and qty_6to12months < 0E.g.: The data types of the returned values should be the same. In the example below, one argument is assigned a numeric value resulting in an error.SQL> select sal, case when sal < 2000 then 'category 1'2 when sal < 3000 then 03 when sal < 4000 then 'category 3'4 else 'category 4'5 end6 from emp;when sal < 3000 then 0*ERROR at line 2:COALESCE and NULLIF functionsOracle provides two more functions that carry out a functionality that is similar to the CASE expression in certain scenarios. We can use these in conjunction with or as a variety of the CASE expression. COALESCE returns the first not null value in a given list of values.E.g.: Returning the first not null value available in four columns present in a table.select coalesce(col1, col2, col3, col4)from am25;E.g.: The above example will return the same result as the below statement with the CASE expression.select case when col1 is not null then col1when col2 is not null then col2when col3 is not null then col3when col4 is not null then col4else nullend VALfrom am25;The NULLIF function compares two values and does the following.Returns null if both values are the same.Returns the first value if both values are different.E.g.: Returning the credits available for customers. The query below will return null if the TOTAL_CREDITS column is equal to the CREDITS_USED column for a customer, else it will return the TOTAL_CREDITS value. select customer_name, nullif(total_credit, credits_used)from customer_credits;E.g.: The above example will return the same result as the statement below with CASE expression.select customer_name, case when total_credits = credits_used then nullelse total_creditsfrom customer_credits;ConclusionThe maximum number of arguments that can be specified is 255, each WHEN ... THEN pair is counted as two arguments. To avoid this limitation the CASE function can be nested. This functionality is supported in PL/SQL from Oracle 9i. The CASE expression will make it easy for developers to get more information based on analysis in a single query.。

Oracle与Sql存储过程的区别

Oracle与Sql存储过程的区别

Oracle常用工具OEM数据库控制工具(http://localhost:port/em)使用SYS登录,连接身份为SYSDBA数据库的维护和设置SQLPlusiSQL*Plus服务端启动了iSQL*Plus服务后,客户端可以通过浏览器访问http://localhost:5560/isqlplusOracle SQL Developer与PL/SQL DeveloperPL/SQL Developer常用oracle开发工具,需要安装oracle客户端,也有不安装客户端使用的方法,不过需要其他设置Oracle SQL Developer,功能与PLSQL类似,可以不用装oracle客户端,并且基于JAVA开发,支持多平台操作ORACLE命令(与SQL不同) (注意:Oracle字符串区分大小写)•desc(describe) tablename显示表结构•to_char(colname,’yyyy-mm-dd’)转换日期格式•NVL(colname,值) NVL2(expr1,expr2,expr3)NULL值处理NVL2 当expr1为null时,返回expr3的值,否则返回expr2的值•||连接字符串例: select ename||’****’||job from emp•like%: 表示0个或多个字符_: 表示单个字符•别名排序,列位置排序(与SQL相同)order by 1◆SQL里可以查看SQL对应其他数据库的数据类型转换规则SELECT* FROM msdb.dbo.MSdatatype_mappings看SQL转Oracle的类型对应SELECT* FROM msdb.dbo.sysdatatypemappings更详细得显示了各个数据库系统的类型对应◆SQL*Plus 部分命令1.& 引用替代变量数字列直接引用,字符类型或者日期类型需要加单引号&no2.&& 引用替代变量当前SQL*Plus都起作用&&no3.DEFINE 定义CHAR类型的替代变量define word = CLERK4.ACCEPT 定义CHAR,NUMBER,DA TE类型的替代变量,比DEFINE更灵活,可以通过prompt来指定输入的提示信息ACCEPT work prompt ‘请输入:’5.CONN 连接Conn scott/&pwd6.PROMPT/PAUSE 信息定义和暂停7.UNDEFINE 清除替代变量的定义8.V ARIABLE 定义绑定变量,引用绑定变量时,必须前加冒号(:),直接给绑定变量赋值时,需要使用EXEC命令Var no numberExec :no:=77889.PRINT 输出绑定变量的值10.ROLLUP GROUP BY时可以产生横向小计和总计CUBE GROUP BY时可以产生横向小计,纵向小计和总计GROUPING 确定统计结果是否用到了特定列,返回0表示使用了该列GROUPING SETS 合并多个分组的统计结果Oracle中如何实现SQL的自增长方法: 通过使用序列和触发器实现.序列实现自动+1,触发器实现自动执行.序列语法:CREATE SEQUENCE INNERIDMINV ALUE 1MAXV ALUE 99999999999999START WITH 1INCREMENT BY 1CACHE 20ORDER;CREATE SEQUENCE 序列名[INCREMENT BY n] ---用于定义序列的步长。

oracle与sql脚本区别

oracle与sql脚本区别

ORACLE与SQL脚本区别1、在SQL中,SQL参数前面用@,Oracle参数前面使用:。

2SQL Oracle大文本类型Ntext NClob二进制数据Image BLOB3、在Sql中,多个sql语句之间不需要使用符号分开,在Oracle中,语句之间需要用;分开,前面需要加begin 后面需要加end;(如:begin 语句1; 语句2;end;)4、自增长字段处理.在Sql中有自增长字段,在Oracel中没有自增长字段,我们需要建立一个序列(Sequence),命名方式:sq_+对应当数据表名(如:sq_DBMail_AllMails)。

使用比较:Sql中:INSERT INTO DBMail_AllMails(MailGuid,FromUserGuid,FromDispName,ToUserGuidList,ToUserDispNameLis t,Subject,MailContent,OwnerUserGuid,SendTime,mailTypeName,mailTypeId,deleteFlag,HasA ttach,Importance,BoxTypeGuid,OutMailGuid)VALUES(@MailGuid,@FromUserGuid,@FromDispName,@ToUserGuidList,@ToUserDispName List,@Subject,@MailContent,@OwnerUserGuid,@SendTime,@mailTypeName,@mailTypeId, @deleteFlag,@HasAttach,@Importance,@BoxTypeGuid,@OutMailGuid)Oracle中:INSERT INTO DBMail_AllMails(Row_ID,MailGuid,FromUserGuid,FromDispName,ToUserGuidList,ToUserDisp NameList,Subject,MailContent,OwnerUserGuid,SendTime,mailTypeName,mailTypeId,deleteF lag,HasAttach,Importance,BoxTypeGuid,OutMailGuid)VALUES(sq_DBMail_AllMails.nextval,:MailGuid,:FromUserGuid,:FromDispName,:ToUserGuid List,:ToUserDispNameList,:Subject,:MailContent,:OwnerUserGuid,:SendTime,:mailTypeName, :mailTypeId,:deleteFlag,:HasAttach,:Importance,:BoxTypeGuid,:OutMailGuid)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字串连接Oracle 使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)。

这个差别要求你在应用程序中做小小的修改。

Oracle Microsoft SQLSELECT FNAME||' '||LNAME AS NAMEFROM STUDENT_ADMIN.STUDENT-----------------------------------------------SELECT FNAME +' '+ LNAME AS NAMEFROM STUDENT_ADMIN.STUDENT流控制(Control-of-Flow)语言流控制语言控制SQL 语句执行流,语句块以及存储过程。

PL/SQL 和Transact-SQL 提供了多数相同的结构,但是还是有一些语法差别。

关键字这是两个RDBMS支持的关键字。

语句 Oracle PL/SQL ---------------------Microsoft SQL Server Transact-SQL声明变量 DECLARE DECLARE语句块 BEGIN...END; BEGIN...END条件处理IF…THEN,ELSIF…THEN,ELSEENDIF;--------------------------------------------------------IF…[BEGIN…END]ELSE[BEGIN…END]CASE expression无条件结束 RETURN------------ RETURN无条件结束当前程序块后面的语句 EXIT BREAK重新开始一个WHILE循环 N/A CONTINUE等待指定间隔 N/A (dbms_lock.sleep) WAITFOR循环控制WHILE LOOP…END LOOP;------------LABEL…GOTO LABEL;FOR…END LOOP;LOOP…END LOOP;WHILEBEGIN… ENDLABEL…GOTO LABEL程序注释/* … */, -- /* … */, --打印输出 RDBMS_OUTPUT.PUT_LINE PRINT引发程序错误(Raise program error) RAISE_APPLICATION_ERROR --------------------RAISERROR执行程序 EXECUTE----------------------EXECUTE语句终止符 Semicolon (;) ------------------N/A声明变量Transact-SQL 和PL/SQL 的变量是用DECLARE关键字创建的。

Transact-SQL 变量用@标记,并且就像PL/SQL 一样,在第一次创建时,用空值初始化。

Oracle Microsoft SQLVSSN CHAR(9);VFNAME VARCHAR2(12);VLNAME VARCHAR2(20);VBIRTH_DATE DATE;VLOAN_AMOUNT NUMBER(12,2);-----------------------------------------DECLARE@VSSN CHAR(9),@VFNAME VARCHAR2(12),@VLNAME VARCHAR2(20),@VBIRTH_DATE DATETIME,@VLOAN_AMOUNT NUMERIC(12,2)Transact-SQL 不支持%TYPE和%ROWTYPE变量数据类型定义。

一个Transact-SQL 变量不能在DECLARE命令中初始化。

在Microsoft SQL Server数据类型定义中也不能使用Oracle 的NOT NULL和CONSTAN T关键字。

像Oracle 的LONG和LONG RAW数据类型一样。

文本和图形数据类型不能被用做变量定义。

此外,Transact-SQL 不支持PL/SQL 风格的记录和表的定义。

给变量赋值Oracle 和Microsoft SQL Server提供了下列方法来为本地变量赋值。

Oracle Microsoft SQLAssignment operator (:=) ---------------------SET @local_variable = valueSELECT...INTO syntax for selecting column values from a single row-------------------------SELECT @local_variable = expression [FROM…] for assigning a literal value,an expression involving other local variables, or a column value from a sin gle rowFETCH…INTO syntax------------------------------- FETCH…INTO syntax这里有一些语法示例Oracle Microsoft SQLDECLARE VSSN CHAR(9);VFNAME VARCHAR2(12);VLNAME VARCHAR2(20);BEGINVSSN := ?'SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN;END;------------------------------------------------------------------------------ DECLARE @VSSN CHAR(9),@VFNAME VARCHAR(12),@VLNAME VARCHAR(20)SET @VSSN = ?'SELECT @VFNAME=FNAME, @VLNAME=LNAME FROM STUDENTS WHERE SSN = @VSSN语句块Oracle PL/SQL 和Microsoft SQL Server Transact-SQL 都支持用BEGIN…END术语来标记语句块。

Transact-SQL 不需要在DECLARE语句后使用一个语句块。

----------------------------------------------------------------------------------如果在Microsoft SQL Server中的IF语句和WHILE循环中有多于一个语句被执行,则需要使用BEGIN…END语句块。

Oracle Microsoft SQLDECLAREDECLARE VARIABLES ...BEGIN -- THIS IS REQUIRED SYNTAXPROGRAM_STATEMENTS ...IF ...THENSTATEMENT1;STATEMENT2;STATEMENTN;END IF;WHILE ... LOOPSTATEMENT1;STATEMENT2;STATEMENTN;END LOOP;END; -- THIS IS REQUIRED SYNTAX DECLAREDECLARE VARIABLES ...BEGIN -- THIS IS OPTIONAL SYNTAXPROGRAM_STATEMENTS ...IF ...BEGINSTATEMENT1STATEMENT2STATEMENTNENDWHILE ...BEGINSTATEMENT1STATEMENT2STATEMENTNENDEND -- THIS IS REQUIRED SYNTAX条件处理Microsoft SQL Server Transact-SQL 的条件语句包括IF和ELSE,但不包括Oracle PL/SQL 中的ELSEIF语句。

可以用嵌套多重IF语句来到达同样的效果。

对于广泛的条件测试,用CASE表达式也许更容易和可读一些。

Oracle Microsoft SQLDECLAREVDEGREE_PROGRAM CHAR(1);VDEGREE_PROGRAM_NAME VARCHAR2(20);BEGINVDEGREE_PROGRAM := 'U'IF VDEGREE_PROGRAM = 'U' THENVDEGREE_PROGRAM_NAME := 'Undergraduate'ELSIF VDEGREE_PROGRAM = 'M' THEN VDEGREE_PROGRAM_NAME := 'Masters'ELSIF VDEGREE_PROGRAM = 'P' THEN VDEGREE_PROGRAM_NAME := 'PhD'ELSE VDEGREE_PROGRAM_NAME := 'Unknown'END IF;END;-----------------------------------------------------DECLARE@VDEGREE_PROGRAM CHAR(1),@VDEGREE_PROGRAM_NAME VARCHAR(20)SELECT @VDEGREE_PROGRAM = 'U'SELECT @VDEGREE_PROGRAM_NAME = CASE @VDEGREE_PROGRAMWHEN 'U' THEN 'Undergraduate'WHEN 'M' THEN 'Masters'WHEN 'P' THEN 'PhD'.ELSE 'Unknown'END重复执行语句(循环)Oracle PL/SQL 提供了无条件的LOOP和FOR LOOP。

Transact-SQL 则提供了WHILE循环和GOTO语句。

WHILE Boolean_expression{sql_statement | statement_block}[BREAK] [CONTINUE]WHILE循环需要测试一个布尔表达式来决定一个或者多个语句的重复执行。

只要给定的表达式结果为真,这个(些)语句就一直重复执行下去。

如果有多个语句需要执行,则这些语句必须放在一个BEGIN…END块中。

Oracle Microsoft SQLDECLARECOUNTER NUMBER;BEGINCOUNTER := 0WHILE (COUNTER <5) LOOPCOUNTER := COUNTER + 1;END LOOP;END;------------------------------------------------------DECLARE@COUNTER NUMERICSELECT@COUNTER = 1WHILE (@COUNTER <5)BEGINSELECT @COUNTER =@COUNTER +1END语句的执行可以在循环的内部用BREAK和CONTINUE关键字控制。

相关文档
最新文档