WEB开发网
开发学院数据库Oracle Oracle与MSSQL过程之间的转化 阅读

Oracle与MSSQL过程之间的转化

 2007-05-06 12:07:19 来源:WEB开发网   
核心提示: 上面两个是无名存储过程,不需要考虑是否已经存在该过程,Oracle与MSSQL过程之间的转化(3),对于有名的过程需要考虑对象是否已经存在,我是从MSSQL向Oracle转化的,即使加了也不错,几步下来,第一步,修改整体结构
上面两个是无名存储过程,不需要考虑是否已经存在该过程。对于有名的过程需要考虑对象是否已经存在。

我是从MSSQL向Oracle转化的。

第一步,修改整体结构。

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

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

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

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

第二步,修改声明变量。

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

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

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

MSSQL游标结构如下:

set@tempSQL='declareallValues_Cursorcursorfor'+CHAR(13)+CHAR(10)
    
set@tempSQL= @tempSQL+'selectPOTABLENAME,
POSPNAMEfromPM_NEPODEF_TABLEWHEREPOID>110499andPOID<110580'
    
--游标语句  
    
EXEC(@tempSQL)
    
--1.创建游标
  
OPENallValues_Cursor
    
--2.打开游标   
  
--判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
  
IF(@@CURSOR_ROWS=0)
 
BEGIN
    
CLOSEallValues_Cursor
    
DEALLOCATEallValues_Cursor
    
set@errorInfo='没有指定表名或存储过程名!'
    
print@errorInfo
    
return
  
END
  
WHILE (@@FETCH_STATUS<>-1)
  
BEGIN
   
FETCH NEXTFROMallValues_CursorINTO@tempPoTableName,@tempPoSpName
    
--3进行数据处理  
  
END
  
CLOSEallValues_Cursor
    
--4.关闭游标
  
DEALLOCATEallValues_Cursor
    
--5.注销游标  

Oracle的游标是在变量中声明定义的,然后在过程中使用。其结构如下:

--声明中
 CursorallValues_Cursoris
    selectUPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME))
    fromPM_NEPODEF_TABLEWHEREPOID>110499andPOID<110580;
--1.声明游标
--过程中
  OPENallValues_Cursor;
--2.打开游标
  WHILEallValues_Cursor%foundLOOP
FETCHallValues_CursorINTOtempPoTableName,tempPoSpName;
--3.处理数据
  ENDLOOP;
CLOSEallValues_Cursor;
--4.关闭游标

第四步修改赋值语句和比较语句。MSSQL中使用Set语句来赋值,Oracle中使用:=来赋值。此外MSSQL中的变量习惯前面增加一个@字符,在Oracle中可以删除。    

第五步修改逻辑结构。MSSQL中使用IF()....ELSE....,结构体之间都要用BEGIN和END框起来。而Oracle则使用IF...THEN...ELSE..END IF结构,中间不必使用BEGIN和END。此外While结构差别也类似。

第六步修改各自的调用方法和函数。常见的是MSSQL的EXEC (@tempSQL),对应Oracle的EXECUTE IMMEDIATE tempSQL。MSSQL的print函数,对应Oracle的DBMS_OUTPUT.PUT_LINE('')函数。此外还有各自使用的数据表,有所不同。例如MSSQL中所有的对象都在sysobjects表中,而Oracle中的表在user_tables中,过程在user_procedures中等。这些需要积累一些经验。

最后不要忘了检查,Oracle的所有句子,必须要有分号表示结束。而MSSQL中不需要,即使加了也不错。几步下来,MSSQL过程就转化成Oracle。

上一页  1 2 3 

Tags:Oracle MSSQL 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接