Столбец не разрешен SQL - PullRequest
       10

Столбец не разрешен SQL

0 голосов
/ 12 декабря 2018

Снимок экрана с кодом ошибки (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)
);

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Для этих примеров представьте две таблицы, 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

[В этом случае все столбцы таблицы будутзаполнить соответствующими столбцами из строк таблицы b, которые возвращает выбранная часть запроса]

или:

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

[В этом случае толькоуказанные столбцы таблицы a будут заполнены столбцами из таблицы b, которые возвращает выбранная часть запроса]

-> Обратите внимание, что в этих примерах ключевое слово VALUES никогда не используется

Метод B ) В этом случае мы даем указание базе данных вставить в таблицу новую строку с определенными значениями (для всех или для определенных столбцов таблицы).В этом методе мы вообще не используем запрос на выборку:

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

В этом примере мы просто даем некоторые значения для вставки.Они будут помещены в соответствующие столбцы таблицы table_a в том порядке, в котором столбцы находятся в таблице.

INSERT INTO table_a (tab_a_column1, tab_a_column3) VALUES (1, 5658);

Числа 1 и 5658 будут вставлены в первый и третий столбцы, а во второй -останется NULL

Итак, при использовании VALUES мы вставляем только одну строку.Но при использовании метода A наш оператор one может вставлять любое количество строк за один раз.Все будет зависеть от того, сколько строк возвращает часть запроса SELECT.

ПРИМЕЧАНИЕ: часть выбора в методе A не имеет ограничений на то, насколько сложным он может быть.Например, он может иметь несколько объединений, где предложения, группировка по ... и т. Д.

Хорошую ссылку, объясняющую INSERT INTO, можно найти здесь: https://www.techonthenet.com/sql/insert.php

0 голосов
/ 12 декабря 2018

Я предполагаю, что 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 строку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...