
时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)
字串连接
Oracle 使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)。这个差别要求你在应用程序中做小小的修改。
Oracle Microsoft SQL
SELECT FNAME||' '||LNAME AS NAME
FROM STUDENT_ADMIN.STUDENT
-----------------------------------------------
SELECT FNAME +' '+ LNAME AS NAME
FROM 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,
ELSE
ENDIF;
--------------------------------------------------------
IF…[BEGIN…END]
ELSE
[BEGIN…END]
ELSE IF
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;
WHILE
BEGIN… END
LABEL…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 SQL
DECLARE
VSSN 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和CONSTANT关键字。
像Oracle 的LONG和LONG RAW数据类型一样。文本和图形数据类型不能被用做变量定义。
此外,Transact-SQL 不支持PL/SQL 风格的记录和表的定义。
给变量赋值
Oracle 和Microsoft SQL Server提供了下列方法来为本地变量赋值。
Oracle Microsoft SQL
Assignment operator (:=) ---------------------SET @local_variable = value
SELECT...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 single row
FETCH…INTO syntax------------------------------- FETCH…INTO syntax
这里有一些语法示例
Oracle Microsoft SQL
DECLARE VSSN CHAR(9);
VFNAME VARCHAR2(12);
VLNAME VARCHAR2(20);
BEGIN
VSSN := ?'
SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN;
END;
#p#副标题#e#
------------------------------------------------------------------------------
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 SQL
DECLARE
DECLARE VARIABLES ...
BEGIN -- THIS IS REQUIRED SYNTAX
PROGRAM_STATEMENTS ...
IF ...THEN
STATEMENT1;
STATEMENT2;
STATEMENTN;
END IF;
WHILE ... LOOP
STATEMENT1;
STATEMENT2;
STATEMENTN;
END LOOP;
END; -- THIS IS REQUIRED SYNTAX DECLARE
DECLARE VARIABLES ...
BEGIN -- THIS IS OPTIONAL SYNTAX
PROGRAM_STATEMENTS ...
IF ...
BEGIN
STATEMENT1
STATEMENT2
STATEMENTN
END
WHILE ...
BEGIN
STATEMENT1
STATEMENT2
STATEMENTN
END
END -- THIS IS REQUIRED SYNTAX
条件处理
Microsoft SQL Server Transact-SQL 的条件语句包括IF和ELSE,但不包括Oracle PL/SQL 中的ELSEIF语句。
可以用嵌套多重IF语句来到达同样的效果。对于广泛的条件测试,用CASE表达式也许更容易和可读一些。
Oracle Microsoft SQL
DECLARE
VDEGREE_PROGRAM CHAR(1);
VDEGREE_PROGRAM_NAME VARCHAR2(20);
BEGIN
VDEGREE_PROGRAM := 'U'
IF VDEGREE_PROGRAM = 'U' THEN
VDEGREE_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_PROGRAM
WHEN '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循环需要测试一个布尔表达式来决定一个或者多个语句的重复执行。
#p#副标题#e#
只要给定的表达式结果为真,这个(些)语句就一直重复执行下去。如果有多个语句需要执行,则这些语句必须放在一个BEGIN…END块中。
Oracle Microsoft SQL
DECLARE
COUNTER NUMBER;
BEGIN
COUNTER := 0
WHILE (COUNTER <5) LOOP
COUNTER := COUNTER + 1;
END LOOP;
END;
------------------------------------------------------
DECLARE
@COUNTER NUMERIC
SELECT@COUNTER = 1
WHILE (@COUNTER <5)
BEGIN
SELECT @COUNTER =
@COUNTER +1
END
语句的执行可以在循环的内部用BREAK和CONTINUE关键字控制。BREAK关键字使WHILE循环无条件的结束,
而CONTINUE关键字使WHILE循环跳过后面的语句重新开始。BREAK关键字同Oracle PL/SQL 中的EXIT关键字是等价的。
而在Oracle 中没有和CONTINUE等价的关
关键词标签:ORACLE,SQL语法
相关阅读 误删Oracle数据库实例的控制文件 为UNIX服务器设置Oracle全文检索 Oracle数据库如何查找删除重复的SQL语句 Oracle导入导出数据库的语法 oracle数据库安装预环境一键处理脚本 oracle常用DBA命令
热门文章
利用Oracle分区表来减少磁盘I/O冲突
Oracle数据库优化之数据库磁盘I/O
讲解Oracle复制技术的分布式系统同步应用
刷新Oracle缓存
oracle 8080与TOMCAT默认端口冲突
DATAGUARD的日志应用服务
人气排行 oracle中使用SQL语句修改字段类型-oracle修改SQL语句案例 Oracle中使用alter table来增加,删除,修改列的语法 ORACLE SQL 判断字符串是否为数字的语句 ORACLE和SQL语法区别归纳(1) oracle grant 授权语句 ORACLE修改IP地址后如何能够使用 如何加速Oracle大批量数据处理 Oracle删除表的几种方法 Oracle 10g创建表空间和用户并指定权限 Oracle连接数太多报错-ORA-12516错误 Oracle字符串截取 连接Oracle数据库的Hibernate配置文件
查看所有0条评论>>