Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Это работает:
insert into TABLE_NAME (COL1,COL2)
select my_seq.nextval, a
from
(SELECT 'SOME VALUE' as a FROM DUAL
UNION ALL
SELECT 'ANOTHER VALUE' FROM DUAL)
Это не работает, потому что последовательность не работает в следующих сценариях:
Источник: http://www.orafaq.com/wiki/ORA-02287
Однако это действительно работает:
insert into table_name
(col1, col2)
select my_seq.nextval, inner_view.*
from (select 'some value' someval
from dual
union all
select 'another value' someval
from dual) inner_view;
<час> Испытывают его:
create table table_name(col1 varchar2(100), col2 varchar2(100));
create sequence vcert.my_seq
start with 1
increment by 1
minvalue 0;
select * from table_name;
insert into TABLE_NAME
(COL1,COL2)
WITH
data AS
(
select 'some value' x from dual
union all
select 'another value' x from dual
)
SELECT my_seq.NEXTVAL, x
FROM data
;
я думаю, именно это Вы хотите, но у меня нет доступа к оракулу для тестирования его прямо сейчас.
От Oracle Wiki, ошибка 02287
, РТЫ 02287 происходят при использовании последовательности, где это не позволяется.
Из мест, где последовательности не могут использоваться, Вы, кажется, пробуете:
В подзапросе
, Таким образом, это кажется, Вы не можете сделать кратных чисел в том же операторе.
решение, которое они предлагают:
, Если Вы хотите, чтобы значение последовательности было вставлено в столбец для каждой созданной строки, затем создайте, прежде чем вставят триггер и выберут значение последовательности в триггере и присвоят его столбцу
Возможность состоит в том, чтобы создать триггер на вставке для добавления в корректном порядковом номере.