下面的程序运行正常
declare
v_str dba_tables.table_name%type;
cursor cur1 is select TRIM(TABLE_NAME) AS TABLE_NAME from dba_tables where trim(oWner)='LIANXI';
begin
  open cur1;
  loop
    FETCH cur1 INTO v_str;  
    EXIT WHEN cur1%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(v_str);  
  end loop;
end;
但把declare替换成create or replace procedure lianxi.impt as就不行。
请问为什么?
谢谢。

解决方案 »

  1.   

    过程名称中不能使用点(dot)。
      

  2.   

    因为你用到dba_tables 所以必须是sys用户才能才行,而你是用lianxi用户!!!  1   create   or   replace   procedure   sys.impt   as
      2   v_str   dba_tables.table_name%type;
      3   cursor   cur1   is   select   TRIM(TABLE_NAME)   AS   TABLE_NAME   from
      4   dba_tables   where   trim(oWner)='LIANXI';
      5   begin
      6       open   cur1;
      7       loop
      8           FETCH   cur1   INTO   v_str;
      9           EXIT   WHEN   cur1%NOTFOUND;
     10           DBMS_OUTPUT.PUT_LINE(v_str);
     11       end   loop;
     12*  end;
    SQL> /过程已创建。SQL>
      

  3.   

    当然你可以 以sys 登陆,然后  grant select on dba_tables to lianxi;
    (说白了就是lianxi没有查询dba_tables的权限,必须给它相应的权限)
    然后再
      create   or   replace   procedure   lianxi.impt   as
      v_str   dba_tables.table_name%type;
      cursor   cur1   is   select   TRIM(TABLE_NAME)   AS   TABLE_NAME   from
      dba_tables   where   trim(oWner)='LIANXI';
      begin
          open   cur1;
          loop
              FETCH   cur1   INTO   v_str;
              EXIT   WHEN   cur1%NOTFOUND;
              DBMS_OUTPUT.PUT_LINE(v_str);
          end   loop;
      end;