龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle与MSSQL过程之间的转化(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
上面两个是无名存储过程,不需要考虑是否已经存在该过程。对于有名的过程需要考虑对象是否已经存在。 我是从 MSSQL 向 Oracle 转化的。 第一步,修改整

上面两个是无名存储过程,不需要考虑是否已经存在该过程。对于有名的过程需要考虑对象是否已经存在。

我是从MSSQLOracle转化的。

第一步,修改整体结构。

MSSQL的总体结构如下,只需要一个beginend,中间加入变量声明。

Begin
declare --变量
--过程
END
GO

Oralce的总体结构如下,需要两个beginend,一个是整个过程,一个是除去申明之外的过程。

BEGIN
DECLARE
--变量
BEGIN
--过程
END;
END;
/

第二步,修改声明变量。

MSSQL需要在每个变量前面加 declare标示,Oracle只需要一个declare标示。此外注意修改各自的数据类型。 

第三步,修改游标。复杂的过程中离不开游标。因此更改游标结构经常用到。

MSSQL的游标是全局的,需要建立之后再清空。而Oracle的游标类似于局部变量,使用完之后,自动清除。 

MSSQL游标结构如下:

set @tempSQL = ' declare allValues_Cursor cursor for '+CHAR(13+ CHAR(10)
        
set @tempSQL =  @tempSQL + ' select POTABLENAME,

POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580'
        
--游标语句    
        
EXEC (@tempSQL)
        
--1.创建游标
    
OPEN allValues_Cursor
        
--2.打开游标       
    
--判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
    IF(@@CURSOR_ROWS = 0 )
    
BEGIN
        
CLOSE allValues_Cursor
        
DEALLOCATE allValues_Cursor
        
set @errorInfo = '没有指定表名或存储过程名!'
        
print @errorInfo
        
return
    
END
    
WHILE  (@@FETCH_STATUS <> -1)
    
BEGIN
       FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
        
--3进行数据处理     
    END
    
CLOSE allValues_Cursor

        --4.关闭游标
    
DEALLOCATE allValues_Cursor
        
--5.注销游标    

精彩图集

赞助商链接