Ошибка при создании триггера - PullRequest
1 голос
/ 16 января 2011

Я создал следующие таблицы:

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 с помощью поля nip PILOTO_COPILOTO.

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

Почему?

Ответы [ 2 ]

3 голосов
/ 16 января 2011

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

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

INSERT INTO TRIPULACION (nip) VALUES(:newRow.NIP);
1 голос
/ 16 января 2011
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 значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...