Oracle和SQLServer的语法区别(4)

2019-08-20 19:54

TUITION_PAID/GET_SUM_ MAJOR(MAJOR) AS PERCENT_MAJOR FROM STUDENT_ADMIN.STUDENT TUITION_PAID/SUM_MAJOR AS PERCENT_MAJOR FROM STUDENT_ADMIN.STUDENT, (SELECT MAJOR, SUM(TUITION_PAID) SUM_MAJOR FROM STUDENT_ADMIN.STUDENT GROUP BY MAJOR) SUM_STUDENT WHERE STUDENT.MAJOR = SUM_STUDENT.MAJOR CREATE OR REPLACE FUNCTION GET_SUM_MAJOR (INMAJOR VARCHAR2) RETURN NUMBER AS SUM_PAID NUMBER; BEGIN 不需要 CREATE FUNCTION 语法;使SELECT SUM(TUITION_PAID) INTO 用 CREATE PROCEDURE 语法。 SUM_PAID FROM STUDENT_ADMIN.STUDENT WHERE MAJOR = INMAJOR; RETURN(SUM_PAID); END GET_SUM_MAJOR; Oracle 和 Microsoft SQL Server 比较运算符几乎是相同的。

运算符 Oracle Microsoft SQL Server 等于 (=) (=) 大于 (>) (>) 小于 (<) (<) 大于或等于 (>=) (>=) 小于或等于 (<=) (<=) 不等于 (!=, <>, ^=) (!=, <>, ^=) 不大于,不小于 暂缺 !> , !< 在集合的任何成员中 IN IN 不在集合的任何成员NOT IN NOT IN 中 集合中的任一值 ANY, SOME ANY, SOME != ALL, <> ALL, < ALL, != ALL, <> ALL, < ALL, > ALL, <= ALL, >= > ALL, <= ALL, >= 引用集合中的 ALL, != SOME, <> SOME, ALL, != SOME, <> SOME, 所有值 < SOME, > SOME, < SOME, > SOME, <= SOME, >= SOME <= SOME, >= SOME 与模式相似 LIKE LIKE 与模式不相似 NOT LIKE NOT LIKE x 和 y 之间的值 BETWEEN x AND y BETWEEN x AND y 不在两者之间的值_ NOT BETWEEN 值存在 EXISTS 值不存在 NOT EXISTS 值{为|不为} NULL NOT BETWEEN EXISTS NOT EXISTS 相同。也可以使用 = NULL、 IS NULL, IS NOT NULL !=NULL,用于向后兼容性(不推荐使用)。 模式匹配

SQL Server LIKE 关键字提供了一些 Oracle 不支持的、有用的通配符搜索选项。除了支持两个 RDBMS 通用的 % 和 _ 通配符外,SQL Server 还支持 [] 和 [^] 字符。

[] 字符用于在给定范围内搜索某一单个字符。例如,如果在单字符位置搜索从 a 到 f 的字符,可以用 LIKE '[a-f]' 或 LIKE '[abcdef]' 指定。此表给出了这些附加通配符的用法。

Oracle SELECT * FROM STUDENT_ADMIN.STUDENT WHERE LNAME LIKE 'A%' OR LNAME LIKE 'B%' OR LNAME LIKE 'C%' Microsoft SQL Server SELECT * FROM STUDENT_ADMIN.STUDENT WHERE LNAME LIKE '[ABC]%' [^] 通配符集合用于指定不在给定范围内的字符。例如,如果接受除 a 到 f 以外的任何字符,则使用 LIKE '[^a - f]' 或 LIKE '[^abcdef]'。

有关 LIKE 关键字的详细信息,请参见 SQL Server Books Online。

NULL 用法对比

尽管 Microsoft SQL Server 传统上支持 SQL-92 标准以及其它一些非标准的 NULL 行为,但是它也支持 Oracle 中 NULL 的用法。

要执行分布式查询,SET ANSI_NULLS 应该设为 ON。

SQL Server ODBC 驱动程序和 SQL Server 的 OLE DB提供程序连接时,就会自动把 SET ANSI_NULLS 设为 ON。此设置可以在 ODBC 数据源、ODBC 连接属性设定,或者连接 SQL Server 前,在应用程序中设置的 OLE DB 连接属性中设定。对来自 DB-Library 应用程序的连接,SET ANSI_NULLS 默认为 OFF。

当 SET ANSI_DEFAILTS 为 ON 时,就会启用 SET ANSI_NULLS。 有关使用 NULL 的详细信息,请参见 SQL Server Books Online。

字符串串联

Oracle 将两个管道符号 (||) 作为字符串串联运算符,而 SQL Server 则使用加号 (+)。这种差别只需要对应用程序代码进行小小的修改即可。

Oracle Microsoft SQL Server SELECT FNAME||' '||LNAME AS SELECT FNAME +' '+ LNAME AS NAME NAME FROM STUDENT_ADMIN.STUDENT FROM STUDENT_ADMIN.STUDENT 控制流语言控制 SQL 语句、语句块和存储过程的执行数据流。PL/SQL 和 Transact SQL 提供了许多相同的结构,但在语法上有一些差异。

关键字

以下是每种 RDBMS 支持的关键字。

语句 声明变量 语句块 Oracle PL/SQL DECLARE BEGIN...END; IFUTHEN, ELSIFUTHEN, ELSE ENDIF; 条件处理 无条件退出 RETURN 无条件退出到当前程序块结束后紧接着的EXIT BREAK 那条语句 重新开始一个 WHILE 暂缺 CONTINUE 循环 暂缺 等待指定的间隔 WAITFOR (dbms_lock.sleep) WHILE LOOPUEND LOOP; WHILE BEGINU END 循环控制 LABELUGOTO LABEL; FORUEND LOOP; LABELUGOTO LABEL LOOPUEND LOOP; 程序注释 /* U */, -- /* U */, -- 打印输出 RDBMS_OUTPUT.PUT_ PRINT Microsoft SQL Server Transact-SQL DECLARE BEGIN...END IFU[BEGINUEND] ELSE [BEGINUEND] ELSE IF CASE expression RETURN 提出程序错误 执行程序 语句终止符 LINE RAISE_APPLICATION_ ERROR EXECUTE 分号 (;) RAISERROR EXECUTE 暂缺 声明变量

Transact-SQL 和 PL/SQL 变量是使用 DECLARE 关键字来创建的。Transact-SQL 变量用 @ 来标识,并且像 PL/SQL 变量一样,第一次创建时该变量被初始化为空值。

Oracle DECLARE VSSN CHAR(9); VFNAME VARCHAR2(12); VLNAME VARCHAR2(20); VBIRTH_DATE DATE; VLOAN_AMOUNT NUMBER(12,2); Microsoft SQL Server DECLARE @VSSN CHAR(9), @VFNAME VARCHAR2(12), @VLNAME VARCHAR2(20), @VBIRTH_DATE DATETIME, @VLOAN_AMOUNT NUMERIC(12,2) Transact-SQL 不支持 %TYPE 和 %ROWTYPE 变量数据类型定义。在 DECLARE 命令中,不能对 Transact-SQL 变量进行初始化。Oracle NOT NULL 和 CONSTANT 关键字不能用在 Microsoft SQL Server 数据类型定义中。

与 Oracle LONG 和 LONG RAW 数据类型一样,text 和 image 数据类型不能用于变量声明。此外,不支持 PL/SQL 类型的记录和表定义。

变量赋值

Oracle 和 Microsoft SQL Server 提供以下方法,给局部变量赋值。

Oracle 赋值运算符 (:=) 用于从一行中选择列值的 SELECT...INTO 语法。 FETCHUINTO 语法 以下是一些语法示例。

Microsoft SQL Server SET @local_variable = value SELECT @local_variable = expression [FROMU] 用于为字面值、涉及其它局部变量的表达式或一行中的列值赋值。 FETCHUINTO 语法 Oracle DECLARE VSSN CHAR(9); Microsoft SQL Server DECLARE @VSSN CHAR(9), VFNAME VARCHAR2(12); VLNAME VARCHAR2(20); BEGIN VSSN := '123448887'; SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN; END; @VFNAME VARCHAR(12), @VLNAME VARCHAR(20) SET @VSSN = '12355887' SELECT @VFNAME=FNAME, @VLNAME=LNAME FROM STUDENTS WHERE SSN = @VSSN 语句块

Oracle PL/SQL 和 Microsoft SQL Server Transact-SQL 支持使用 BEGINUEND 术语,来指定程序块。Transact-SQL 不要求在 DECLARE 语句后面使用语句块。在 Microsoft SQL Server 中,如果 IF 语句和 WHILE 循环执行不止一个语句,需要使用 BEGINUEND 语句块。

Oracle Microsoft SQL Server DECLARE DECLARE DECLARE VARIABLES ... DECLARE VARIABLES ... BEGIN -- THIS IS OPTIONAL SYNTAX BEGIN -- THIS IS REQUIRED SYNTAX PROGRAM_STATEMENTS ... PROGRAM_STATEMENTS ... IF ... IF ...THEN BEGIN STATEMENT1; STATEMENT1 STATEMENT2; STATEMENT2 STATEMENTN; STATEMENTN END IF; END WHILE ...LOOP WHILE ... STATEMENT1; BEGIN STATEMENT2; STATEMENT1 STATEMENTN; STATEMENT2 END LOOP; STATEMENTN END; -- THIS IS REQUIRED SYNTAX END END -- THIS IS REQUIRED SYNTAX 条件处理

Microsoft SQL Server Transact-SQL 条件语句包含 IF 和 ELSE 语句,而不是 Oracle PL/SQL 中的 ELSIF 语句。可以嵌套多个 IF 语句,来达到同样的效果。对于大量的条件测试,CASE 表达式更容易阅读。

Oracle DECLARE Microsoft SQL Server DECLARE


Oracle和SQLServer的语法区别(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:JSP学期授课计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: