2013-05-09 2 views
2

У меня есть процедура, которая вызывает ошибку «PL/SQL: Statement ignored». Это сообщение немного расплывчато, и я не могу понять, почему моя процедура не будет компилироваться. Вся процедура должна быть проверена, если дата доставки клиента меньше SYSDATE, а если она удалена, и если не печатать, клиент не может быть удален.ОШИБКА PLS-00103: Встречался символ «DECLARE»?

Код для процедуры здесь:

CREATE PROCEDURE remove_customer (customer_id VARCHAR2) IS 
declare 
    ordersCount pls_integer; 
BEGIN 
    select count(*) into ordersCount 
    from placed_orders 
    where fk1_customer_id = remove_customer.customer_id 
    and delivery_date < sysdate; 
if ordersCount = 0 then 
THEN 
DELETE FROM order_line 
WHERE order_line.FK1_order_id in 
(SELECT order_id FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id 
); 
DELETE FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id; 
DELETE FROM customer 
WHERE customer.customer_id = remove_customer.customer_id; 
total_customers := total_customers - 1; 
ELSE 
DBMS_OUTPUT.PUT_LINE 'Customer currently has a order been delivered'; 
END IF; 
END; 

И сообщение об ошибке с указанием PLS-00103: Обнаружен символ «DECLARE»

спасибо за любые советы.

+0

вы не можете использовать непосредственно placed_order.delivery_date в placed_order представляет собой таблицу, и вы не можете поставить условие на таблицу, как показано в коде. вы можете лучше получить это значение в одну переменную, а затем поставить условие там. [ваш предыдущий пост] (http://stackoverflow.com/questions/16459211/procedure-to-delete-only-if-database-higher-then-sysdate/16459824#16459824) –

+0

Привет, спасибо за то, что это то, что я делаю но код все еще не работает –

ответ

0

Эта линия:

IF placed_order.delivery_date < SYSDATE 

не имеет особого смысла - вы не можете использовать столбец, как это (об этом думать: какие строки в placed_order должно быть по сравнению с Sysdate One All??) ,

Если вы хотите проверить, имеет ли клиент доставку, который уже был доставлен, вам необходимо дополнительно SELECT:

CREATE PROCEDURE remove_customer (customer_id VARCHAR2) IS  
    ordersCount pls_integer; 
begin 
    select count(*) into ordersCount 
    from placed_orders 
    where fk1_customer_id = remove_customer.customer_id 
    and delivery_date < sysdate; 

    if ordersCount = 0 then 
    -- your code for deleting the customer here 
    else 
    -- raise error, show message, ... 
    end if; 
+0

Привет, спасибо за это, я отредактировал то, что вы сказали, что имеет смысл. Заключительный код, если теперь в вопросе, но когда я запускаю этот код, все, что я получаю, это ошибка «PLS-00103». Обнаружен символ «DECLARE», если вы ожидаете одно из следующего: начало функции pragma procedure подтип типа « вы есть идеи, почему? –

+0

Извините, моя ошибка. Объявление не требуется для функций/процедур, просто избавитесь от него. Я обновил свой ответ. –

+0

Кроме того, я бы рекомендовал вам не редактировать исходный код - это смущает других читателей. Если вы обновите вопрос, сохраните исходную версию и добавьте новую версию в конец вопроса, четко заявив, что это обновление. –

Смежные вопросы