首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> PLSQL >> 正文

写PL/SQL程序时碰到的一些问题


1.有for update类型的Cursor
定义Cursor时,加了for update,因为需要打开cursor后还要对这些数据进行修改和删除,
但在修改和删除数据后在关闭cursor前就commit,就出现了下面的错误:
ORA-01002: 读取违反顺序
ORA-06512: 在"JWGL.PCKGSTUDSLTCOURSE", line 62
ORA-06512: 在line 2

Error: ORA-06550: 第 2 行, 第 0 列:
PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
begin case declare
exit for goto if loop mod null pragma raise return select
update while with 《an identifier》
《a double-quoted delimited-identifier》 《a bind variable》
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
《a single-quoted SQL string》 pipe

刚开始还以为是因为我嵌套select子句,而不能加for update。
后来才发现是因我在修改删除了数据马上commit后,又马上从cursor中fetch数据。
其实在打开有for update的cursor时,系统会给取出的数据加上排他锁(exclusive),
这样在这个锁释放前其他用户不能对这些记录作update、delete和加锁。
而我一旦执行了commit,锁就释放了,游标也变成无效的,再去fetch数据时就出现错误了。
因而要把commit放在循环外,等到所有数据处理完成后再commit,然后关闭cursor.

2.如何在一个对象类型的方法中对该对象的属性进行赋值
在一般情况下,调用一个对象的方法时,对象自己SELF是以IN类型的参数传进去的,因此不能
对对象的属性进行修改否则会出现下面的错误。

Error: PLS-00363: 表达式 'SELF' 不能用作赋值目标
Line: 26
Text: setRoundNO(vSltCourseCalendar.getRoundNO());

Error: PL/SQL: Statement ignored
Line: 26
Text: setRoundNO(vSltCourseCalendar.getRoundNO());
Trying to compile an object in Oracle 9i.
Why is this throwing an exception?
Does anyone have a clue? Or all of you as puzzled as me? Any experts?

Throws error:
PLS-00363: expression 'SELF.ATTRIB_NUMBER' cannot be used as an assignment target

但可以通过把SELF以IN OUT方式传进去,然后在方法内就能对对象属性进行赋值了。
MEMBER FUNCTION TEST_FUNCTION(SELF IN OUT TEST_OBJECT) RETURN NUMBER

 

【责编:landss】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·诱人的奶酪 J2ME手机开发技术
 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航