Table of ContentsPreviousNext

Ispirer             Ispirer


Ispirer SQLWays数据库迁移软件

Microsoft SQL Server TOP子句到 Oracle转换

Microsoft SQL Server TOP 子句阻止行数由SELECT语句退回的。TOP允许指定行数或百分比以退回。如果SELECT语句包括TOP,也有ORDER BY子句,行要退回的行选择从命令的结果集。

Oracle ROWNUM伪列退回数字表明,为了在该行中选择的结果集。ROWNUM可以使用行在Oracle,但是ROWNUM被分配在订购。

SQLWays转换Microsoft SQL Server TOP子句到Oracle如下:

a)SELECT 语句与TOP不包含ORDER BY 子句。

如果Microsoft SQL Server不包含ORDER BY子句,SQLWays执行TOP子句使用ROWNUM伪列在SELECT语句的WHERE子句在Oracle。

如果TOP被指定与PERCENT子句 SQLWays计算行退回的查询总数和行数相应指定的百分比。

表格 36。 SELECT语句与TOP不包含ORDER BY子句
Microsoft SQL Server
Oracle
create procedure sql_sp_select_top
as
DECLARE @a number
select top 1 @a=col1     from tab1 
CREATE OR REPLACE PROCEDURE sql_sp_select_top
AS
v_a VARCHAR2(255);
BEGIN
select col1 INTO v_a from tab1 WHERE ROWNUM <=1;
END; 
create procedure sql_sp_select_top2
as
DECLARE @a number
select top 1 @a=col1     from tab1 WHERE col2>0 
CREATE OR REPLACE PROCEDURE sql_sp_select_top2
AS
v_a VARCHAR2(255);
BEGIN
select col1 INTO v_a from tab1 WHERE col2>0 and ROWNUM <=1;
END; 
create procedure sql_sp_select_top3
as
DECLARE @a number
select top 30 percent @a=col1     from tab1 
CREATE OR REPLACE PROCEDURE sql_sp_select_top3
AS
v_a VARCHAR2(255);
BEGIN
select col1 INTO v_a from tab1 WHERE ROWNUM <=
30 *(SELECT COUNT(*) from tab1) / 100;
END; 

b) SELECT语句与TOP也包含ORDER BY子句。

Microsoft SQL Server不同的,Oracle应用比较ROWNUM以前排序结果集。如果Microsoft SQL Server SELECT语句包含ORDER BY子句,SQLWays转换源查询 到查询有子查询。子查询执行次序,当查询执行行限制使用ROWNUM。

表格 37。 SELECT语句与TOP也包含ORDER BY子句
Microsoft SQL Server
Oracle
create procedure sql_sp_select_top4
as
DECLARE @a number
select top 1 @a=col1     from tab1 order by col1 
create or replace procedure sql_sp_select_top4
as
a number;
begin
select * into a from (select col1 from tab1 order by col1) where 
rownum<=1;
end; 
create procedure sql_sp_select_top5
as
DECLARE @a number
select top 15 percent @a=col1     from tab1 order by 
col1 
create or replace procedure sql_sp_select_top5
as
a number;
begin
select * into a from (select col1 from tab1 order by col1) where 
rownum<=15*(select count(*) from tab1 order by col1)/100;
end; 


Table of ContentsPreviousNext
Ispirer             Ispirer
版权 © 1999-2015 Ispirer Systems Ltd. Ispirer和SQLWaysIspirer Systems Ltd的品牌。所有其他产品名称可能是其各自公司的商标。版权所有。