oracle 存储过程编译有问题
本帖最后由 wanglianxi2008IT 于 2012-11-21 10:11:01 编辑 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;
[最优解释]
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
[其他解释]
游标中有多行数据,
你把它fetch到一个变量可定时不行的。
定义一个type 吧
[其他解释]
filed_test
[其他解释]
',';
end loop;
CLOSE Cur_fieldsd;
dbms_output.put_line(VN_Field_Str);
END test_proc;
[其他解释]
我的存储过程很长,其中有很多判断逻辑,游标我想在需求的时候定义,有没有办法解决呢?帮帮忙,谢谢!
[其他解释]
游标定义必须放到说明的部分,而不能放到执行部分(即begin与end之间)
[其他解释]
我有用 loop 循环,这个是没问题的。
[其他解释]
我有见过放到begin end 存储过程 之间的游标,可以执行。
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html