写了一个如下的存储过程
create or replace procedure add_field(tb_name varchar2,owner varchar2)
as
tempSQL varchar2(1000);
type cursor_t is ref cursor;
emp_cur cursor_t ;begin
     tempSQL := 'select column_name,data_type,data_length,data_precision,data_scale from dba_tab_columns';
     tempSQL := tempSQL || ' where owner = ''' || owner || ''' and table_name = ''' || tb_name || '''';
     
     open emp_cur for tempSQL;
  ……
    close emp_cur;
end add_field;首先tempsql拼接出来的sql语句是可以执行的,已经测试过了
结果在测试这个存储过程的时候总是在open emp_cur for tempSQL这里提示“表或视图不存在”,望高人指点

解决方案 »

  1.   

    如果是tempsql拼接出来的sql语句是可以执行的,那么可能就是用户权限的问题了
      

  2.   

    是权限的问题! 你看一下,有管理员登陆 执行一下grant select any TABLE to cur_username
    在管理员权限下是可以执行的SELECT * FROM DBA_TAB_COLUMNS
      

  3.   

    我再把我现在的情况说清楚一点
    我用plsql,使用a这个普通用户登陆的,单独执行select * from dba_tab_columns也是可以的,就是放到存储过程或者函数里面,然后f9跟踪就出现那个错误了。