Как я могу вставить несколько строк в оракула со значением последовательности?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

43
задан Community 23 May 2017 в 11:55
поделиться

5 ответов

Это работает:

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)
41
ответ дан WW. 26 November 2019 в 22:56
поделиться

Это не работает, потому что последовательность не работает в следующих сценариях:

  • В операторе Where
  • В GROUP BY или пункте
  • ORDER BY В ОТЛИЧНОМ пункте
  • Наряду с ОБЪЕДИНЕНИЕМ или ПЕРЕСЕКАЮТСЯ или МИНУС
  • В подзапросе

Источник: 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;
24
ответ дан Dilshod Tadjibaev 26 November 2019 в 22:56
поделиться
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
;

я думаю, именно это Вы хотите, но у меня нет доступа к оракулу для тестирования его прямо сейчас.

4
ответ дан EvilTeach 26 November 2019 в 22:56
поделиться

От Oracle Wiki, ошибка 02287

, РТЫ 02287 происходят при использовании последовательности, где это не позволяется.

Из мест, где последовательности не могут использоваться, Вы, кажется, пробуете:

В подзапросе

, Таким образом, это кажется, Вы не можете сделать кратных чисел в том же операторе.

решение, которое они предлагают:

, Если Вы хотите, чтобы значение последовательности было вставлено в столбец для каждой созданной строки, затем создайте, прежде чем вставят триггер и выберут значение последовательности в триггере и присвоят его столбцу

2
ответ дан skaffman 26 November 2019 в 22:56
поделиться

Возможность состоит в том, чтобы создать триггер на вставке для добавления в корректном порядковом номере.

1
ответ дан Brian Schmitt 26 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: