Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->数据库应用 ->Oracle ->正文

Oracle8i和9i中PLSQL程序不同运行结果

来源:赛迪网技术社区  作者:Webmaster 时间:2007-04-17 点击: [收藏] [投稿]




在把ORACLE的数据库从8i升级到9i及以上的时候,一般认为原有的PLSQL程序应该完全兼容,即运行过程和运行结果完全一致。遗憾的是,事实并非如此,由于ORACLE PLSQL引擎的升级,它对某些代码解释做了更改,导致某些代码会有不同的运行结果。各位在升级数据库时必须重视,否则将导致无法估量的损失和难以恢复的灾难。

1、PLSQL表作为参数传递

先看以下代码,在ORACLE 8i和9i中的运行结果。

  declare
  
  type test_rec is record
  (
  col_1 varchar2(100)
  );
  
  type test_tbl is table of test_rec index by binary_integer;
  
  l_tbl test_tbl;
  
  procedure change_value
  is
  begin
  l_tbl(1).col_1 := 'I am changed!';
  end;
  
  procedure sub_test(pi_str in varchar2)
  is
  begin
  dbms_output.put_line('before: '||pi_str);
  change_value;
  dbms_output.put_line('after : '||pi_str);
  end;
  
  begin
  
  l_tbl(1).col_1 := 'I am ok!';
  sub_test(l_tbl(1).col_1);
  
  exception
  when others then
  dbms_output.put_line(sqlerrm);
  end;
  

示例代码非常简单,即将PLSQL表的某个成员变量当作参数给另一过程,此过程改变了原PLSQL表的值,但未改变传入参数的值(当然不能改,表示为IN的参数的值是不能改的),观看改变前后,传入参数的值在Oracle 8i和9i的变化。

运行结果:

  Oracle 8i Oracle 9i
  before: I am ok! before: I am ok!
  after : I am ok! after : I am changed!
  

显然运行结果不一样!在Oracle 8i中,传入参数的值在原PLSQL表的值改变前后未变化,而在Oracle 9i中,传入参数的值被改动了。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Oracle数据库应遵循的PL/SQL编码规则   下一篇:.NET框架下Oracle到SQL Server迁移

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号