创建触发器出错

时间:2011-01-16 19:21:07

标签: sql oracle plsql triggers

我创建了以下表格:

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;

并创建了以下触发器,以便在与PILOTO_COPILOTO中的新行对应的TRIPULACION中插入一行。

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;

尝试使用PILOTO_COPILOTO的nip字段更新TRIPULACION表时出现以下错误。

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

为什么?

2 个答案:

答案 0 :(得分:3)

如果直接使用INSERT INTO VALUES(...),则必须指定表格的所有列。

您可以精确插入要插入数据的列。

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

答案 1 :(得分: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个值。

相关问题