PL / SQL: ORA-00904: неверный идентификатор & PL / SQL: оператор игнорируется & PLS-00364: l oop использование переменной индекса недопустимо - PullRequest
1 голос
/ 16 апреля 2020
@C:\Users\4\Desktop\dbdrop;
@C:\Users\4\Desktop\dbcreate;
SET SERVEROUTPUT ON;
 begin
     for cur_r in
      (select order_id, company_name, order_date
        from orders
        where order_date < trunc(sysdate)
          and rownum <= 5
        )
     loop
        dbms_output.put_line('------------');
       dbms_output.put_line('Order ID   = ' || cur_r.order_id);
       dbms_output.put_line('Order date = ' || to_char(cur_r.order_date, 'dd.mm.yyyy'));
       dbms_output.put_line('Company    = ' || cur_r.company_name);
     end loop;
   end;
  /

Отчет об ошибке -

ORA-06550: строка 3, столбец 27: PL / SQL: ORA-00904: "COMPANY_NAME": неверный идентификатор
ORA-06550 : строка 3, столбец 10: PL / SQL: SQL Оператор игнорируется
ORA-06550: строка 10, столбец 49: PLS-00364: l oop переменная индекса 'CUR_R' недопустима
ORA-06550: строка 10, столбец 7: PL / SQL: оператор игнорируется
ORA-06550: строка 11, столбец 58: PL * 00254: l oop Использование индексной переменной 'CUR_R' недопустимо
ORA-06550: строка 11, столбец 8: PL / SQL: оператор игнорируется
ORA-06550: строка 12, столбец 49: PLS-00364: l oop использование переменной индекса 'CUR_R' недопустимо
ORA-06550: строка 12, столбец 7: PL / SQL: оператор игнорируется
06550. 00000 - "строка% s, столбец% s: \ n% s"
* Причина: обычно PL / SQL ошибка компиляции.
* Действие:

Вот таблица ORDERS

CREATE TABLE ORDERS
(
    ORDER_ID        NUMBER(9)   NOT NULL,
    CUSTOMER_CODE   VARCHAR(5)  NOT NULL,
    EMPLOYEE_ID     NUMBER(9)   NOT NULL,
    ORDER_DATE      DATE        NOT NULL,
    REQUIRED_DATE   DATE,
    SHIPPED_DATE    DATE,
    SHIP_VIA        VARCHAR(40),
    FREIGHT         NUMBER(10,2)    DEFAULT 0,
    SHIP_NAME       VARCHAR(40),
    SHIP_ADDRESS    VARCHAR(60),
    SHIP_CITY       VARCHAR(15),
    SHIP_REGION     VARCHAR(15),
    SHIP_POSTAL_CODE    VARCHAR(10),
    SHIP_COUNTRY    VARCHAR(15),
    CONSTRAINT PK_ORDERS PRIMARY KEY (ORDER_ID),
    CONSTRAINT FK_CUSTOMER_CODE FOREIGN KEY (CUSTOMER_CODE) REFERENCES CUSTOMER(CUSTOMER_CODE),  
    CONSTRAINT FK_EMPLOYEE_ID FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID),  
    CONSTRAINT FK_SHIP_VIA FOREIGN KEY (SHIP_VIA) REFERENCES SHIPPER(COMPANY_NAME)  
);

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

ORA-06550: строка 3, столбец 27: PL / SQL: ORA-00904: «COMPANY_NAME»: неверный идентификатор

Это указывает на то, что ваш запрос ссылается на столбец который не существует в таблице. Теперь, когда вы опубликовали описание ORDERS, мы видим, что на самом деле в нем нет столбца с именем COMPANY_NAME. Поскольку запрос недействителен, курсор недействителен, и поэтому ссылки на курсор также недопустимы. Вот почему у вас так много ошибок компиляции. В программировании часто встречается одна синтаксическая ошибка, которая запускает еще целую кучу.

Однако ORDERS имеет внешний ключ для CUSTOMERS. Поэтому, вероятно, вам нужно присоединиться к этой таблице в запросе курсора:

for cur_r in
      (select o.order_id, c.company_name, o.order_date
        from orders o
             join customers c on c.customer_code = o.customer_code
        where o.order_date < trunc(sysdate)
          and rownum <= 5
        )
     loop
0 голосов
/ 16 апреля 2020

В SQL Разработчик, вы не можете скопировать / вставить то, что я написал (ранее) в SQL* Plus; Вы бы пропустили номера строк (и SQL> подсказки) и использовали бы только это:

set serveroutput on
begin
  for cur_r in
    (select order_id, ship_via as company_name, order_date
     from orders
     where order_date < trunc(sysdate)
       and rownum <= 5
    )
  loop
    dbms_output.put_line('------------');
    dbms_output.put_line('Order ID   = ' || cur_r.order_id);
    dbms_output.put_line('Order date = ' || to_char(cur_r.order_date, 'dd.mm.yyyy'));
    dbms_output.put_line('Company    = ' || cur_r.company_name);
  end loop;
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...