oracle 存储过程编译有问题

wanglianxi2008IT 2012-11-21 10:06:47
CREATE OR REPLACE PROCEDURE test_proc
(
tablename IN varchar2
) IS
filed_test varchar2(30):='';
VN_Field_Str varchar2(4000):= '';

BEGIN

declare CURSOR Cur_fieldsd IS
select column_name
from user_tab_columns
where upper(table_name) = upper(tablename);
OPEN Cur_fieldsd;
LOOP
FETCH Cur_fieldsd
INTO filed_test;
EXIT WHEN Cur_fieldsd%NOTFOUND;
VN_Field_Str := VN_Field_Str || filed_test || ',';
end loop;
CLOSE Cur_fieldsd;

dbms_output.put_line(VN_Field_Str);

END test_proc;

call test_proc('T_BC_OtherExpenseBill');


PROCEDURE EASUSER4.TEST_PROC 编译错误
错误:PLS-00103: 出现符号 "FETCH"在需要下列之一时:
constant exception
<an identifier> <a double-quoted delimited-identifier> table
LONG_ double ref char time timestamp interval date binary
national character nchar
行:19
文本:FETCH Cur_fieldsd
错误:PLS-00103: 出现符号 "CLOSE"在需要下列之一时:
end not pragma final
instantiable order overriding static member constructor map
行:24
文本:CLOSE Cur_fieldsd;


...全文
210 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jieouyang 2012-12-05
  • 打赏
  • 举报
回复
引用 6 楼 wanglianxi2008IT 的回复:
我有见过放到begin end 存储过程 之间的游标,可以执行。
在begin end 存储过程 之间的游标。 放在块里面的。 declare begin end;块里面才可以。
ora-0600 2012-11-21
  • 打赏
  • 举报
回复
引用 4 楼 tangren 的回复:
游标定义必须放到说明的部分,而不能放到执行部分(即begin与end之间)
+1
wanglianxi2008IT 2012-11-21
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE test_proc ( tablename IN varchar2 ) IS filed_test varchar2(30):=''; VN_Field_Str varchar2(4000):= ''; BEGIN declare CURSOR Cur_fieldsd IS select column_name from user_tab_columns where upper(table_name) = upper(tablename); begin OPEN Cur_fieldsd; LOOP FETCH Cur_fieldsd INTO filed_test; EXIT WHEN Cur_fieldsd%NOTFOUND; VN_Field_Str := VN_Field_Str || filed_test || ','; end loop; CLOSE Cur_fieldsd; end; dbms_output.put_line(VN_Field_Str); END test_proc; call test_proc('T_BC_OtherExpenseBill'); 解决了,这样写就可以执行了,加多多一个begin end;语句块,不过还是要谢谢各位了。
wanglianxi2008IT 2012-11-21
  • 打赏
  • 举报
回复
我有见过放到begin end 存储过程 之间的游标,可以执行。
wanglianxi2008IT 2012-11-21
  • 打赏
  • 举报
回复
引用 2 楼 mengwl1009 的回复:
游标中有多行数据, 你把它fetch到一个变量可定时不行的。 定义一个type 吧
我有用 loop 循环,这个是没问题的。
tangren 2012-11-21
  • 打赏
  • 举报
回复
游标定义必须放到说明的部分,而不能放到执行部分(即begin与end之间)
wanglianxi2008IT 2012-11-21
  • 打赏
  • 举报
回复
我的存储过程很长,其中有很多判断逻辑,游标我想在需求的时候定义,有没有办法解决呢?帮帮忙,谢谢!
ora-0600 2012-11-21
  • 打赏
  • 举报
回复
游标中有多行数据, 你把它fetch到一个变量可定时不行的。 定义一个type 吧
tangren 2012-11-21
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE test_proc ( tablename IN varchar2 ) IS filed_test varchar2(30):=''; VN_Field_Str varchar2(4000):= ''; CURSOR Cur_fieldsd IS select column_name from user_tab_columns where upper(table_name) = upper(tablename); BEGIN OPEN Cur_fieldsd; LOOP FETCH Cur_fieldsd INTO filed_test; EXIT WHEN Cur_fieldsd%NOTFOUND; VN_Field_Str := VN_Field_Str || filed_test || ','; end loop; CLOSE Cur_fieldsd; dbms_output.put_line(VN_Field_Str); END test_proc;

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧