2011-01-16 177 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; 

我得到了以下错误试图与PILOTO_COPILOTO的轧场更新TRIPULACION表。

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个值。