首页 > 解决方案 > 列不允许 SQL

问题描述

错误代码截图(ShipDate 现在是错误)

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

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

代码:

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;

订单表供参考

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)
);

标签: sqloracleoracle11gsqlplus

解决方案


我认为这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;

此外,检查FROM&WHERE子句:只有一个条件涉及 3 个表。结果,您将获得比预期更多的行,除非您修复该问题(或除非COUNTER表仅包含 1 行)。


推荐阅读