2011-01-16 3 views
1

Я создал следующие таблицы:Ошибка при создании триггера

CREATE TABLE PILOTO_COPILOTO (
nip number, 
anos_experienciencia float) 
TABLESPACE TSPROYECTOABD; 

и

CREATE TABLE TRIPULACION (
nip number, 
nombre varchar(20), 
apellido varchar(20), 
fecha_nac date, 
fecha_contratacion date, 
sexo char, 
idiomas varchar(50), 
nacionalidad varchar(20)) 
TABLESPACE TSPROYECTOABD; 

И создал следующий триггер, чтобы вставить строку в TRIPULACION, соответствующий новой строки в PILOTO_COPILOTO.

create or replace 
TRIGGER anadir_tripulacion 
    AFTER INSERT OR UPDATE ON PILOTO_COPILOTO 
    REFERENCING NEW AS newRow 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO TRIPULACION VALUES(:newRow.NIP); 
    END anadir_tripulacion; 

я получил следующие ошибки, пытаясь обновить таблицу TRIPULACION с зажимным полем PILOTO_COPILOTO.

Error(7,9): PL/SQL: SQL Statement ignored 
Error(7,21): PL/SQL: ORA-00947: not enough values 

Почему?

ответ

3

Если вы используете напрямую INSERT INTO VALUES(...), вы должны указать все столбцы таблицы.

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

INSERT INTO TRIPULACION (nip) VALUES(:newRow.NIP); 
1
INSERT INTO TRIPULACION VALUES(:newRow.NIP); 

>> Error(7,21): PL/SQL: ORA-00947: not enough values 

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

INSERT INTO TRIPULACION 
    (nip, nombre, apellido, fecha_nac, fecha_contratacion, 
    sexo, idiomas, nacionalidad) 
VALUES 
    (:newRow.NIP); 

Так что ясно, что вы имеют 8 столбцов для вставки, но только 1 значение.

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