浅析oracle与sqlserver的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Select语句的不同
oracle Select * from tablename where rownum < 2
sqlserver Select top 1 * from tablename
oracle Select A.*, B.* from A, B where A.bh=B.bh(+)
sqlserver Select A.*, B.* from A left Join B on A.bh=B.bh
oracle Select A.*, B.* from A, B where A.bh(+)=B.bh
sqlserver Select A.*, B.* from A right join B where A.bh=B.bh //oracle 9i 以后也支持了
oracle Select * from tablename where lrsj>= to_date(‘2002-11-11’,’yyyy-mm-dd’)
sqlserver Select * from tablename where lrsj >= ‘2002-11-11’
oracle Select sysdate from dual
sqlserver Select getdate()
oracle Select Field1 || Field2 from A (指字符串的)
sqlserver Select Field1+Field2 from A
Insert语句的不同
Oracle如何实现自增列
(1)建立测试数据表。
CREATE TABLE TEST
(
ID NUMBER,
NAME V ARCHAR2(20),
PRIMARY KEY(ID)
);
(2) 创建序列。
CREATE SEQUENCE SEQ_TEST;
Parameter的区别存储过程的不同(3)创建触发器。
CREATE OR REPLACE TRIGGER AUTOINCREMENT BEFORE INSERT ON TEST
FOR EACH ROW
WHEN (NEW.ID IS NULL)
BEGIN
SELECT SEQ_TEST.NEXTV AL INTO :NEW.ID FROM DUAL; END;
(4)插入数据。
INSERT INTO TEST(NAME) V ALUES('NAME1');
(5)查看插入结果。
SELECT * FROM TEST;
Oracel Insert Into Table (Column1,Column2) values (:Value1,:V alue2)
Sql Server insert into Table (Column1,Column2) values (@Value1,@Value2)
注在查询字符串中使用@+字符来描述参数,在SqlParameter中的参数名也要使用"@"符号。
而在Oracle中SQL语句不能使用@符号,以冒号":"代替
与SQL Server不同,在Oracle中存储过程一般写成Function,而不是Procedure。
Oracle存储过程并不直接返回记录集,记录集以游标的形式通过参数返回
一个包(Packages)可以包含多个存储过程,使用存储过程时采用"包名.存储过
程名"的方式
Function GetList(keywords In varchar2,p_info_list_Cursor out
get_data_cur_type)
Return Number
As
Begin
open p_info_list_Cursor For
Select * from Test where Key=keywords
;
Return 0;
End;
Oracle 的INTERSECT 和MINUS 集合运算符(差异集合)SQL Server EXISTS 和NOT EXISTS 子句
oracle SELECT CCODE, CNAME
FROM DEPT
INTERSECT
SELECT ODE, AME
FROM STUDENT G,
DEPT C
WHERE ODE = ODE
sqlserver SELECT CCODE, CNAME
FROM DEPT C
WHERE EXISTS
(SELECT * FROM
STUDENT G
WHERE ODE = ODE)
oracle SELECT CCODE, CNAME
FROM DEPT
MINUS
SELECT ODE, AME
FROM STUDENT G,
DEPT C
WHERE ODE = ODE
sqlserver SELECT CCODE, CNAME
FROM DEPT C
WHERE NOT EXISTS
(SELECT * FROM
STUDENT G
WHERE ODE = ODE)
T-SQL 语言支持对表和视图的插入,但不支持对SELECT 语句的INSERT 操作。
oracle INSERT INTO (SELECT SSN, CCODE, GRADE FROM GRADE)
V ALUES ('11', '1111',NULL)
sqlserver INSERT INTO GRADE (SSN, CCODE, GRADE)
V ALUES ('11', '1111',NULL)
T-SQL 语言支持对表和视图的插入,但不支持对SELECT 语句的INSERT 操
作。
如果Oracle 应用程序代码执行对SELECT 语句的插入操作
oracle Update A SET 字段1=(select 字段表达式from B WHERE)字段2=(select 字段表达式from B WHERE)WHERE 逻辑表达式
sqlserver Update A SET 字段1=B字段表达式字段2=B字段表达式
From B WHERE 逻辑表达式
Oracle UPDATE 命令只能使用一个PL/SQL 块中的程序变量。
而Transact-SQL 语言并不需要使用块。
oracle DECLARE
V AR1 NUMBER(10,2);
BEGIN
V AR1 := 2500;
UPDA TE STUDENT SET TUITION = V AR1;
END;
sqlserver DECLARE
@V AR1 NUMERIC(10,2)
SELECT @V AR1 = 2500
UPDA TE STUDENT SET TUITION =@V AR1。