列不允许 SQL

Column Not Allowed SQL

Error Code Screenshot(ShipDate 现在是错误)

对于我的学校项目,我们将创建一个产品数据库,客户可以在其中下订单等。我将我的代码与同学进行了比较,除了我的列数较少外,它们基本相同。这部分代码将用户输入插入到 Orders Table.

倒数第二列 OrderStatus,是 * 在控制台中出现的位置。如果它看起来很乱,我提前道歉,由于某种原因,Body 中的格式不会延续到发布帖子。

代码:

INSERT INTO Orders
     VALUES (OrderNum,
             OrderDate,
             CustID,
             PNum,
             UnitPrice,
             QtyOrder,
             TotalCost,
             ShipDate,
             QtyShipped,
             OrderStatus,
             NULL);

SELECT MaxNum,
       SYSDATE,
       &vCustID,
       '&vPNum',
       UnitPrice,
       &vQty,
       TotalCost,
       ShipDate,
       QtyShipped,
       'Open',
       Orders.ReasonNum
  FROM CancelledOrder, Orders, Counter
 WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;

COMMIT;

订单Table供参考

CREATE TABLE Orders
(
   OrderNum      NUMBER (4) PRIMARY KEY,
   OrderDate     DATE,
   CustID        CHAR (3),
   PNum          VARCHAR2 (3),
   UnitPrice     NUMBER,
   QtyOrder      NUMBER,
   TotalCost     NUMBER,
   ShipDate      DATE,
   QtyShipped    NUMBER,
   OrderStatus   VARCHAR2 (10),
   ReasonNum     NUMBER,
   CONSTRAINT fk_CustID FOREIGN KEY (CustID) REFERENCES Customer (CustID),
   CONSTRAINT fk_PNum FOREIGN KEY (PNum) REFERENCES Product (PNum),
   CONSTRAINT fk_ReasonNum FOREIGN KEY
      (ReasonNum)
       REFERENCES CancelledOrder (ReasonNum)
);

我认为 INSERT 应该与 SELECT 一致,即

insert into ...
select ... from

以你的例子为例:

INSERT INTO Orders (OrderNum,        --> no VALUES keyword, but list of columns
                    OrderDate,
                    CustID,
                    PNum,
                    UnitPrice,
                    QtyOrder,
                    TotalCost,
                    ShipDate,
                    QtyShipped,
                    OrderStatus,
                    reasonnum)        --> reasonnum instead of null
   SELECT MaxNum,
          SYSDATE,
          &vCustID,
          '&vPNum',
          UnitPrice,
          &vQty,
          TotalCost,
          ShipDate,
          QtyShipped,
          'Open',
          Orders.ReasonNum
     FROM CancelledOrder, Orders, Counter
    WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;

此外,检查 FROMWHERE 子句:有 3 个 table 只涉及一个条件。结果,你会得到比预期更多的行,除非你修复它(或者除非 COUNTER table 只包含 1 行)。

对于这些示例,假设有两个 tables,a 和 b,每个有 3 列。 插入时,语句必须使用:

方法 A) 这里我们指示数据库插入(到所有或特定列)查询结果。为此,我们编写 INSERT INTO SELECT ..... 例如:

INSERT INTO table_a select table_b.* from table_b  --Useful when we know how many columns table a and b have; 

INSERT INTO table_a select  b.column_2, b.column_3, b.column_1 from table_b --Usefull if b had more columns and we want those three, or if the order of the columns of b needs id different from the order of the columns of a

[在这种情况下,table a 的所有列将填充 table b 的行中的相应列,即 select 部分查询 returns]

或:

INSERT INTO table_a (tab_a_column1, tab_a_column3) select b.column_1, b.column_3 from table_b

[在这种情况下,只有 table a 的指定列将填充来自 table b 的列,即查询的 select 部分returns]

-> 请注意,在这些示例中从未使用 VALUES 关键字

方法 B) 在这种情况下,我们指示数据库将具有特定值的单个新行插入 table(到table)。在此方法中,我们根本不使用 select 查询:

INSERT INTO table_a VALUES ( 1, 'asdf', 5658 ) ; 

在这个例子中,我们只是给出了一些要插入的值。它们将按照列在 table.

中的顺序放入 table_a 的相应列中
INSERT INTO table_a (tab_a_column1, tab_a_column3) VALUES (1, 5658);

第一列和第三列将插入数字1和5658,而第二列将保留为NULL

所以,当使用 VALUES 时,我们只插入一行。 但是当使用方法 A 时,我们的一条语句可能一次插入任意数量的行。这一切都将取决于查询 SELECT 部分的行数 returns.

注意:方法 A 中查询的 select 部分对其复杂程度没有限制。例如,它可以有多个连接、where 子句、group by ...等等。

可以在此处找到解释 INSERT INTO 的好 link: https://www.techonthenet.com/sql/insert.php