2011-01-16 196 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個值。