首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle 存储过程编译有有关问题

2013-03-26 
oracle 存储过程编译有问题本帖最后由 wanglianxi2008IT 于 2012-11-21 10:11:01 编辑CREATE OR REPLACE P

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之间)
[其他解释]

引用:
游标中有多行数据,
你把它fetch到一个变量可定时不行的。
定义一个type 吧


我有用 loop 循环,这个是没问题的。
[其他解释]
我有见过放到begin  end 存储过程  之间的游标,可以执行。
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

热点排行