创建触发器时出错

发布于 2024-10-12 10:37:07 字数 903 浏览 3 评论 0原文

我创建了以下表:

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

为什么?

I created the following tables:

CREATE TABLE PILOTO_COPILOTO (
nip number, 
anos_experienciencia float)
TABLESPACE TSPROYECTOABD;

and

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;

And created the following trigger to insert a row into TRIPULACION corresponding to the new row in 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;

I got the following errors trying to update the TRIPULACION table with the nip field of PILOTO_COPILOTO.

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

Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拒绝两难 2024-10-19 10:37:07

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

您可以像这样精确地在其中插入数据的列。

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

If you use directly INSERT INTO VALUES(...), you must specify all the columns of the table.

You can precise the column in which you want insert data like this.

INSERT INTO TRIPULACION (nip) VALUES(:newRow.NIP);
热鲨 2024-10-19 10:37:07
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 个值。

INSERT INTO TRIPULACION VALUES(:newRow.NIP);

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

This is because when you omit the column list, it implies that you are inserting the complete column list, so what you are writing is really

INSERT INTO TRIPULACION
    (nip, nombre, apellido, fecha_nac, fecha_contratacion,
    sexo, idiomas, nacionalidad)
VALUES
    (:newRow.NIP);

So it is clear you have 8 columns to insert to but 1 value provided.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文