Создать представление на основе следующего значения последовательности - PullRequest
3 голосов
/ 09 декабря 2011

Можно ли создать представление на основе последовательности nextval?

Я создаю вид, подобный этому:

create view seq_agents_nextval 
as
select seq_agents.nextval from dual;

Из документации Oracle я прочитал, что она так не работает. Есть ли еще какие-нибудь хитрости или советы по созданию вида с таким выводом?

1 Ответ

2 голосов
/ 26 января 2012

вашей лучшей ставкой будет 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'
       ;

, ноэто значение будет иметь ограниченное использование, так как оно может быть больше, чем фактическое значение, на столько же, сколько число кэшированных значений для последовательности умножено на приращение последовательности и не учитывает максимальное значение и поведение переноса (последнеедва аспекта могут быть исправлены).

имейте в виду, что может быть выдано произвольное число новых значений последовательности между запросом вашего представления и использованием возвращенного значения.

надеюсь, что это поможет и с уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...