根据序列的nextval值创建View

时间:2011-12-09 10:42:28

标签: oracle view

我可以根据nextval序列创建视图吗?

我创建了一个这样的视图:

create view seq_agents_nextval 
as
select seq_agents.nextval from dual;

从Oracle文档中我读到它不能像那样工作。是否有任何其他技巧或提示来创建具有类似输出的视图?

1 个答案:

答案 0 :(得分:2)

根据以下代码的精神,您最好的选择是udf:

CREATE OR REPLACE FUNCTION my_nv RETURN INTEGER AS
    l_rv NUMBER;
BEGIN
   SELECT seq_agents.nextval
     INTO l_rv
     FROM DUAL
        ;
   RETURN l_rv;
END;

CREATE OR REPLACE VIEW seq_agents_nextval AS
      SELECT my_nv
        FROM DUAL
           ;

否则您可以查询系统视图以获得至少一个近似答案

CREATE OR REPLACE VIEW seq_agents_nextval AS
  SELECT last_number + increment_by nv
    FROM ALL_SEQUENCES
   WHERE sequence_owner = '<the_proper_schema_name>'
     AND sequence_name = 'SEQ_AGENTS'
       ;

但是这个值的用途有限,因为它可能比实际值大了多少,序列的缓存值乘以序列增量,并没有考虑最大值和结转值行为(后两个方面可以修复)。

请记住,在查询视图和使用返回值之间可能会发出任意数量的新序列值。

希望这有助于&amp;问候