0

我有很多存储过程在数据库链接上的视图上工作。

我想在执行所有过程之前检查视图是否可用,所以我以面向对象的编程方式创建了一个 check() 函数。

现在我可以做: if(checked()=1) then ..work.. else null; 万一;

功能是:

create or replace FUNCTION CHECK_MYVIEW RETURN NUMBER IS 
CHECKED NUMBER;  
BEGIN

  BEGIN 

    select 1
    into CHECKED 
    from MYVIEW 
    where rownum = 1
    ;

  EXCEPTION WHEN OTHERS THEN 
    CHECKED:=0;
  END;

  RETURN CHECKED;

END CHECK_MYVIEW;

经过一些测试,我已经编写了检查查询,结果很好。通过这种选择,我可以判断视图是否有记录,即使远程数据库存在连接问题。但这是我自己的解决方案。

是否有优化的 oracle 查询来获得相同的功能?对于任何类型的异常都不会在没有引发异常的情况下工作......

4

1 回答 1

0

您可以尝试检查元数据:

DECLARE 
  checked INT;
BEGIN

   SELECT COUNT(*)
   INTO checked
   FROM all_views@dblink
   WHERE name = 'xxx'
     AND owner = 'yyy';

   --checked 0 -- not exists, 1 - exists

END;
于 2017-11-09T16:04:52.853 回答