【问题标题】:SQL Error: "ORA-00947: not enough values"SQL 错误:“ORA-00947:没有足够的值”
【发布时间】:2021-10-17 03:28:47
【问题描述】:

为什么我没有得到足够的值错误,因为我使用了自动增量并且没有在插入中添加任何值?

CREATE TABLE Customer(
customerId INTEGER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1) primary key,
firstName VARCHAR2(25) not null,
middleName VARCHAR2(25),
lastName VARCHAR2(25) not null,
dateOfBirth DATE not null,
phoneNumber NUMBER(10) not null,
billingAddress VARCHAR2(35) not null
);

INSERT INTO Customer VALUES
('Sam', null, 'Siqi', (TO_DATE('18/12/1999', 'DD/MM/YYYY')),12345678, 
'Smith Street NSW');

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这是您创建的表。它包含 7 列:

    SQL> CREATE TABLE Customer
      2  (
      3     customerId       INTEGER
      4                        GENERATED ALWAYS AS IDENTITY
      5                           (      START WITH 1 INCREMENT BY 1)
      6                        PRIMARY KEY,
      7     firstName        VARCHAR2 (25) NOT NULL,
      8     middleName       VARCHAR2 (25),
      9     lastName         VARCHAR2 (25) NOT NULL,
     10     dateOfBirth      DATE NOT NULL,
     11     phoneNumber      NUMBER (10) NOT NULL,
     12     billingAddress   VARCHAR2 (35) NOT NULL
     13  );
    
    Table created.
    

    您的插入尝试失败:

    SQL> INSERT INTO Customer
      2       VALUES ('Sam',
      3               NULL,
      4               'Siqi',
      5               (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
      6               12345678,
      7               'Smith Street NSW');
    INSERT INTO Customer
                *
    ERROR at line 1:
    ORA-00947: not enough values
    

    为什么会失败?因为您插入了 6 个值,而表格有 7 列。始终,但始终指定所有涉及的列。这包括你写的select(即避免select *)和-在这种情况下-insert。所以:

    SQL> INSERT INTO Customer (firstname,
      2                        middlename,
      3                        lastname,
      4                        dateofbirth,
      5                        phonenumber,
      6                        billingaddress)
      7       VALUES ('Sam',
      8               NULL,
      9               'Siqi',
     10               (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
     11               12345678,
     12               'Smith Street NSW');
    
    1 row created.
    
    SQL>
    

    现在可以了。

    customerid 是自动生成的,并不代表你可以跳过它。


    是的,您可以使用default(正如阿南德的回答所暗示的那样),但在我看来,这是不好的做法。正如我所说:始终命名您正在使用的所有列。

    SQL> INSERT INTO customer
      2       VALUES (DEFAULT,
      3               'Sam',
      4               NULL,
      5               'Siqi',
      6               (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
      7               12345678,
      8               'Smith Street NSW');
    
    1 row created.
    
    SQL>
    

    【讨论】:

      【解决方案2】:

      试试这个:

      INSERT INTO Customer VALUES
      (DEFAULT,'Sam', null, 'Siqi', (TO_DATE('18/12/1999', 'DD/MM/YYYY')),12345678, 
      'Smith Street NSW');
      

      【讨论】:

      • 你能扩展一下这个问题作者(或任何其他读者)为什么要尝试它?他们做错了什么?
      猜你喜欢
      • 2020-01-25
      • 2022-01-23
      • 2020-07-25
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多