1.sqlserver数据库转换为oracle

使用sqlserver的【导出数据】功能,我的sqlserver版本是2008,所以数据源选择sql server native client 10.0 在网上搜索资料,低版本的应该有sql server native client,

使用sql server的身份验证,输入用户名,密码,选择数据库,点击下一步。

sql server数据库从c盘迁移到d盘 sqlserver数据库迁移到oracle_oracle

选择目标:oracle provider for  oledb

sql server数据库从c盘迁移到d盘 sqlserver数据库迁移到oracle_sql server_02

点击属性,输入oracle数据库名称,以及数据库的登录名、密码,选择允许保存密码,可以点击【测试连接】实验数据库是否能够拼通,点击下一步。

选择【复制一个或多个表或视图的数据】,再次点击下一步,选择要导出的表以及视图。

注意:在此界面,目标表名称应该去掉引号,否则,导出到oracle后,select*from tablename ,如果tablename大小写与目标表名称不一致,会导致查询不到结果集。在pl/sql中提示表或视图不存在。同样道理,该表中字段也是带有引号的,这样直接导出后同样存在以上问题。

然后一直下一步直到完成即可。

在导出的过程中,可能遇到错误终止,那么你需要查看具体的错误是那个表引起的。主要问题有该列值为空,字段长度max在oracle中不存在等。需要你更改sqlserver数据库该表的结构以及内容。

注意:每个表的主键以及外键等需要自己重新手动添加,是不是可以自动创建,我没有找到方案,如果哪位能够有合适的方法,期盼留言能够告诉我。在这里我先谢谢了。

2.视图的创建 

sqlserver导出功能会把视图创建到表中,所以我们需要在oracle中重新建立视图。注意一些函数的转换等即可。例如sqlserver中isnull函数应该用nvl替换,getdate函数在oracle中不存在等问题。

3函数问题

这里是最麻烦的一部分了,我现在知道的只能是手动的挨着去重新创建,一个一个的。包括哪些系统函数需要如何用oracle替换掉等。

函数部分:返回变量的函数我就不累赘的写了 贴出一个示例,大家一看就明白了

示例如下:

create or replace function fGetPy(Str  in  varchar2 :='')
return number
is
returnvalue number;
strlen integer;
ii  integer;
n  integer;
c  integer;
chn  char(1);
begin
strlen:=length(Str);
returnvalue:='';
ii:=0 ;

return(returnvalue);
end ;

返回表值的函数在这里我大体说下,也是为了让自己可以再次看下。

需要创建一个type类型。例如CREATE  TYPE ROWTYPE1 AS OBJECT(A NUMBER,B VARCHAR2(1000),C NUMBER); 相当于创建了一个表的样子,这里我自己乱说的 ,觉得不对的就不要批评我了,呵呵。

然后在函数的return变量部分 声明该变量为ROWTYPE1类型即可。

函数体部分:

CREATE OR REPLACE FUNCTION FN_TEST RETURN TABLETYPE PIPELINED
AS AAA ROWTYPE1;
BEGIN

FOR MYROW IN (select L_CLASS_CD,PROGRAM_NAME,NULL AS A from achievement) loop
   AAA:=ROWTYPE1(MYROW.L_CLASS_CD,MYROW.PROGRAM_NAME,MYROW.A);
   PIPE ROW(AAA);
END LOOP;
RETURN;

END;

 

4.存储过程

存储过程返回表一个简单的方式,使用系统游标即可

依然贴出示例供大家参考。当然示例是我从网上找到的,测试通过,大家可以放心的拿来实验。

create or replace procedure proAA(out_var out sys_refcursor)
 as
begin
open out_var for select * from table1;
 end;

--调用
declare
 v_out sys_refcursor;
begin
 proAA(v_out);
end;

好了这就是我转换数据库时候的一些心得,最麻烦的地方就是存储过程以及函数的重新创建,如果哪位有更好的办法或者我做的不对的地方,希望能够指出来,我也好改正