写PL/SQL程序时碰到的一些问题
发布时间:2018-08-16 19:10:13 所属栏目:电子商务 来源:站长网
导读:记的上次写PL/SQL程序还是刚毕业不久,还用的是Oracle 7 for Novell 后来只是偶尔用一下oralce, PL/SQL的一些语法已经全忘了, 这不,碰到好些低级的问题,谨记下,希望不会再忘记。 1.有for update类型的Cursor 定义Cursor时,加了for update,因为需要打
记的上次写PL/SQL程序还是刚毕业不久,还用的是Oracle 7 for Novell 后来只是偶尔用一下oralce, 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 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |