我可以根据nextval
序列创建视图吗?
我创建了一个这样的视图:
create view seq_agents_nextval
as
select seq_agents.nextval from dual;
从Oracle文档中我读到它不能像那样工作。是否有任何其他技巧或提示来创建具有类似输出的视图?
答案 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;问候