我创建了以下表格:
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
为什么?
答案 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个值。