赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2006.12.21 04:54     来源:赛迪网技术社区    作者:SHENSGANG




在把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中,传入参数的值被改动了。

1 2 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Oracle 9i新特性之细粒度访问原则 (12-12) · Oracle8i回滚段表空间出现坏块的解决 (11-13)
· Oracle 9i数据库异常关闭后的启动 (11-03) · 详细介绍:Oracle 9i的各技术特征(2) (10-25)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管