выбрать BILLER_ONBOARDING_ID_SEQ.NEXTVAL из двойного;
Возможно, что двойной стол пуст. С SYSDB
привилегия, вы можете удалить/усекатьSYS.DUAL стол.
Однако вы все равно получите значение sequence.nextval
, даже если dual не возвращает строку. Оптимизатор как-то уверен, что всегда извлекает строку из двух таблиц.
SQL> conn [email protected] as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL> select * from dual;
D
-
X
SQL> delete from dual;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dual;
no rows selected
Таким образом, нет ни одной строки в двойной таблице.
Давайте создадим последовательность и тест:
SQL> create sequence s;
Sequence created.
SQL> select s.nextval from dual;
NEXTVAL
----------
1
SQL> select * from dual;
no rows selected
SQL> select s.nextval from dual;
NEXTVAL
----------
2
объяснить план показывает, что БЫСТРО DUAL операция по-прежнему выбирает строку:
SQL> explain plan for select s.nextval from dual;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------
Plan hash value: 3499163060
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | SEQUENCE | S | | | |
| 2 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------
9 rows selected.
SQL>
ПРИМЕЧАНИЕ: DUAL - специальная таблица, которая является собственностью d на SYS. Он является частью словаря данных. Неправильно манипулировать словарем данных. Это не рекомендуется.
Если двойная таблица не манипулировали, то вы должны быть в состоянии увидеть следующий вывод из DBA_OBJECTS:
SQL> column owner format a15
SQL> column object_name format a15
SQL> column object_type format a15
SQL> SELECT owner, object_name, object_type FROM dba_objects WHERE object_name='DUAL';
OWNER OBJECT_NAME OBJECT_TYPE
--------------- --------------- ---------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM
SQL>
В вашем случае это может быть, что настраиваемая таблица с именем DUAL было и не содержит строки.
Если это так, и что SYS.DUAL не манипулировали, а затем попробуйте использовать:
select BILLER_ONBOARDING_ID_SEQ.NEXTVAL from SYS.dual;
Добро пожаловать! Пожалуйста, посмотрите [тур] (http://stackoverflow.com/tour) и [как спросить] (http://stackoverflow.com/help/how-to-ask). – moffeltje
Выбор из 'dual' должен всегда возвращать строку,' select * from dual' работать как ожидалось?!? –
Да, выберите * from dual, также возвращая '' никакие строки не выбрали. –