2012-08-13 1 views
3

Я пытаюсь следующий SQL в Oracle 11g DB, который возвращаетOracle Вставить возвращение ORA-01400

SQL Error: ORA-01400: cannot insert NULL into ("CRABERS"."AG_ASSET_REF"."CREATE_ID").

Однако, вы можете увидеть, что я заселять этот столбец, который отформатирован как число (38, 0). Как я вставляю значение, почему еще я могу получить ORA-01400?

INSERT INTO ag_asset_ref 
      (asset_type_id, 
      create_id, 
      create_date, 
      file_size, 
      bus_unit_id, 
      status, 
      name) 
VALUES  (1050, 
      2458, 
      SYSDATE, 
      50000, 
      1000, 
      0, 
      'test insert') 
+7

У вас есть триггеры, запущенные на этом столе? –

+0

Триггеры? Как триггер может ссылаться на таблицу? Если это был триггер на 'ag_asset_ref', и эта таблица должна была быть передана внутри триггера, не должно было возникнуть ошибка мутирующего запуска? (Если это не триггер 'complex', так как я вижу, что OP использует 11g) – Annjawn

+0

@Annjawn, триггер не« ссылается »на таблицу, она * находится на * таблице. например как в приведенном ниже примере Джеффа, в таблице «ag_asset_ref» может быть определен триггер «ПЕРЕД НАЧАЛОМ», который будет срабатывать всякий раз, когда что-либо пытается вставить в эту таблицу. Поскольку это триггер «ПЕРЕД», он может изменить вставленное фактическое значение, переопределив то, что было предусмотрено в исходной инструкции insert. –

ответ

2

С помощью этого триггера появляется ваша ошибка:

CREATE TRIGGER t_ag_asset_ref BEFORE INSERT OR UPDATE ON ag_asset_ref 
FOR EACH ROW 
BEGIN 
    :NEW.create_id := NULL; 
END; 

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