2016-04-05 10 views
-2

Я хочу вставить одну таблицу в другую таблицу. Просто разница в другой таблице Один столбец является автоматическое приращение, а имя столбца SEQ_NOOracle недостаточно значений ошибка

Я попытался с ниже запроса, но дает ошибку в

ORA-00947: не хватает значения

Просьба предложить, почему запрос дает ошибку

+2

у вас все еще отсутствует один столбец, если я вижу его правильно. У вас есть дата, но вы по-прежнему не указали столбец 'HISTSEQ_NO' – SomeJavaGuy

+2

Укажите столбцы, т.е.' INSERT INTO t (c1, c2, c3, ...) SELECT ca, cb, cc, ... FROM ... ' , Примечание. Для SELECT не требуются круглые скобки. – jarlh

+0

@KevinEsche: Я хочу вставить 'HISTSEQ_NO' автоматически приращение .. я не думаю, что мне нужна дата для этого. – BNN

ответ

1

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

Однако это хорошая идея, даже если вы этого не сделаете это нужно, потому что это дает вам больше контроля и более читаемый код:

insert into xxacl_pn_project_link_h(
            HISTSEQ_NO   , 
            HIST_DATE   , 
            MKEY    , 
            PROJECT_ID   , 
            PROJECT_NAME  , 
            DIRECT_BOOKING  , 
            NON_ORACLE_PROJECT , 
            ATTRIBUTE1   , 
            ATTRIBUTE2   , 
            ATTRIBUTE3   , 
            ATTRIBUTE4   , 
            ATTRIBUTE5   , 
            LAST_UPDATE_DATE , 
            DELETE_FLAG  , 
            CREATION_DATE  , 
            CREATED_BY   , 
            LAST_UPDATE_LOGIN 
            ) 
select HISTSEQ_NO_sq.nextVal,/*HISTSEQ_NO  */ 
     sysdate    ,/*HIST_DATE   */ 
     MKEY     ,/*MKEY    */ 
     PROJECT_ID   ,/*PROJECT_ID  */ 
     PROJECT_NAME   ,/*PROJECT_NAME  */ 
     DIRECT_BOOKING  ,/*DIRECT_BOOKING */ 
     NON_ORACLE_PROJECT ,/*NON_ORACLE_PROJECT*/ 
     ATTRIBUTE1   ,/*ATTRIBUTE1  */ 
     ATTRIBUTE2   ,/*ATTRIBUTE2  */ 
     ATTRIBUTE3   ,/*ATTRIBUTE3  */ 
     ATTRIBUTE4   ,/*ATTRIBUTE4  */ 
     ATTRIBUTE5   ,/*ATTRIBUTE5  */ 
     LAST_UPDATE_DATE  ,/*LAST_UPDATE_DATE */ 
     DELETE_FLAG   ,/*DELETE_FLAG  */ 
     CREATION_DATE  ,/*CREATION_DATE  */ 
     CREATED_BY   ,/*CREATED_BY  */ 
     LAST_UPDATE_LOGIN  /*LAST_UPDATE_LOGIN */ 
FROM xxacl_pn_project_link l 
WHERE l.mkey = '1' 

Для обработки вашего HISTSEQ_NO поля, давая, что он не имеет автоинкрементный логики, вы можете использовать последовательность:

create sequence HISTSEQ_NO_sq start with 1 
+0

мой' HISTSEQ_NO' идет пустой. Он должен идти 1, 2, 3, – BNN

+0

, поэтому у HISTSEQ_NO нет автоматической инкрементной логики; вы можете создать последовательность и использовать ее для вставки; просто отредактировал мой asnwer – Aleksej

+0

yup, done. теперь его работа. Одно здесь. Нужно ли создавать «последовательность» для каждого столбца ** auto incremented **? – BNN

0

Вы упускаете значение для истории конкретного столбца HISTSEQ_NO. Скорее всего, вы хотите использовать sequence для генерации этого id/number.

0

Укажите имена столбцов. И оставьте столбец HISTSEQ_NO. Если это auto increment, то он будет добавлен автоматически при вставке.

INSERT INTO xxcus.xxacl_pn_project_link_h (
    HIST_DATE 
    ,MKEY 
    ,PROJECT_ID 
    ,PROJECT_NAME 
    ,DIRECT_BOOKING 
    ,NON_ORACLE_PROJECT 
    ,ATTRIBUTE1 
    ,ATTRIBUTE2 
    ,ATTRIBUTE3 
    ,ATTRIBUTE4 
    ,ATTRIBUTE5 
    ,LAST_UPDATE_DATE 
    ,DELETE_FLAG 
    ,CREATION_DATE 
    ,CREATED_BY 
    ,LAST_UPDATE_LOGIN 
    ) 
SELECT SYSDATE 
    ,MKEY 
    ,PROJECT_ID 
    ,PROJECT_NAME 
    ,DIRECT_BOOKING 
    ,NON_ORACLE_PROJECT 
    ,ATTRIBUTE1 
    ,ATTRIBUTE2 
    ,ATTRIBUTE3 
    ,ATTRIBUTE4 
    ,ATTRIBUTE5 
    ,LAST_UPDATE_DATE 
    ,DELETE_FLAG 
    ,CREATION_DATE 
    ,CREATED_BY 
    ,LAST_UPDATE_LOGIN 
FROM xxcus.xxacl_pn_project_link l 
WHERE l.mkey = '1' 
+0

Получение ошибки как 'ORA-01400: не может вставить NULL в (« XXCUS ».« XXACL_PN_PROJECT_LINK_H ».« HISTSEQ_NO »)' – BNN

+0

Вы упомянули в комментариях, что 'HISTSEQ_NO'' - мой автоинкрементный столбец – Utsav

Смежные вопросы