PLS-00103: Обнаружен символ «конец файла» при ожидании одного из следующих событий: функция начала, прагма, тип подтипа процедуры - PullRequest
0 голосов
/ 03 августа 2020

Я работаю над sqldeveloper (pl / sql)

DECLARE 
    CUSTOMER_NAME VARCHAR(50);
    PRODUCT VARCHAR(100);
BEGIN
    SELECT C.FIRST_NAME ||','|| C.SURNAME, P.PRODUCT
    INTO CUSTOMET_NAME, PRODUCT
    FROM CUSTOMER C, PRODUCT P, BILLING B, PRODUCT_BILLING PB
    WHERE B.BILL_ID = PB.BILL_ID
    AND P.PRODUCT_ID = PB.PRODUCT_ID
    AND C.CUSTOMER_ID = B.CUSTOMER_ID 
    AND P.PRICE > 10000;
    DBMS_OUTPUT.PUT_LINE('CUSTOMER:   '||CUSTOMER_NAME);
    DBMS_OUTPUT.PUT_LINE('PRODUCT:    '||PRODUCT);
END;

Я выполнил часть объявления, но получил это сообщение об ошибке. Я погуглил, но так и не понял.

Error starting at line : 160 in command -
DECLARE 
    CUSTOMER_NAME VARCHAR(50);
    PRODUCT VARCHAR(100);
Error report -
ORA-06550: line 3, column 25:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   begin function pragma procedure subtype type <an identifier>
   <a double-quoted delimited-identifier> current cursor delete
   exists prior
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

1 Ответ

0 голосов
/ 03 августа 2020

Поскольку вы не предоставили тестовый пример (операторы CREATE TABLE и INSERT INTO), я создал свой собственный (пустой) набор таблиц. При этом такой код компилирует ; поскольку таблицы пусты, мой запрос ничего не возвращает, но все же может указать вам правильное направление.

Обратите внимание на типы данных, размеры, раздел обработки исключений.

SQL> set serveroutput on
SQL>
SQL> declare
  2    l_customer_name varchar2(100);  -- at least size of first name + surname
  3    l_product       product.product%type;
  4  begin
  5    select c.first_name ||', '|| c.surname,
  6           p.product
  7      into l_customer_name,
  8           l_product
  9      from customer c join billing b on c.customer_id = b.customer_id
 10      join product_billing pb on pb.bill_id = b.bill_id
 11      join product p on p.product_id = pb.product_id
 12      where p.price > 10000;
 13
 14    dbms_output.put_line('Customer: ' || l_customer_name);
 15    dbms_output.put_line('Product : ' || l_product);
 16  exception
 17    when no_data_found then
 18      dbms_output.put_line('Nothing matches');
 19    when too_many_rows then
 20      dbms_output.put_line('Too many products match');
 21  end;
 22  /
Nothing matches

PL/SQL procedure successfully completed.

SQL>

Если все еще не помогает, как я уже сказал: предоставьте тестовый пример.

...