使用sql语句 select × from ta@dblink 可以查询
但在存储过程中
CREATE OR REPLACE PROCEDURE Proc as
begin
select × from ta@dblink;
end;
却报错,表或视图 不存在呢?

解决方案 »

  1.   

    不能吧,没道理的
    不过有一点,存储过程中要写select into或者游标
      

  2.   

    存储过程里面的select没有into有意义吗?
      

  3.   


    直接授予的SELECT权限, 而非通过ROLE等方式授予的.
      

  4.   

    存储过程中不能直接写select语句吧,update,delete是可以的
    改成select ...into...试试
      

  5.   

    其实问题就算
    insert into ta@dblink select * from ta
    执行这样的sql没问题,
    CREATE OR REPLACE PROCEDURE Proc as 
    begin 
    insert into ta@dblink select * from ta; 
    end; 
    这样也会报错,表或视图 。
    会不会是我没有在tnsname里配置远程数据库的信息,我直接用
    create database link dblink
      connect to a identified by a
      using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)))(CONNECT_DATA=(SID=aa)))';这样的方式才出问题呢?
      

  6.   

    试试下面:
    CREATE OR REPLACE PROCEDURE Proc as 
     begin 
      v_sql:='select × from ta@dblink';
       EXECUTE IMMEDIATE v_sql;
     end; orCREATE OR REPLACE PROCEDURE Proc as 
     begin 
       EXECUTE IMMEDIATE 'select × from ta@dblink';
     end;  
      

  7.   

    要修改成select .. into..方式的
      

  8.   

    存储过程当中,怎么能直接select语句?!要是没into有什么意义?!
      

  9.   

    1.可用动态sql
    2.先建立视图指向远程表,然后在存储过程中改为调用此视图