2 Stimmen

FEHLER PLS-00103: Auf das Symbol "DECLARE" gestoßen?

Ich habe eine Prozedur, die den Fehler 'PL/SQL: Anweisung ignoriert' ausgibt. Diese Meldung ist ein wenig vage und ich kann nicht herausfinden, warum meine Prozedur nicht kompiliert werden will. Die Prozedur soll nur überprüfen, ob das Lieferdatum des Kunden kleiner ist als SYSDATE und falls ja, den Kunden löschen und falls nicht 'Kunde kann nicht gelöscht werden' ausgeben.

Der Code für die Prozedur lautet:

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 'Kunde hat derzeit eine gelieferte Bestellung';
END IF;
END;

Und die Fehlermeldung besagt PLS-00103: Symbol "DECLARE" gefunden

Vielen Dank für jeglichen Rat.

0voto

Frank Schmitt Punkte 28856

Diese Zeile:

IF placed_order.delivery_date < SYSDATE

macht nicht viel Sinn - man kann eine Spalte nicht so verwenden (denken Sie darüber nach: welche der Zeilen in placed_order sollte mit SYSDATE verglichen werden? Eine? Alle?).

Wenn Sie überprüfen wollen, ob dieser Kunde eine Lieferung hat, die bereits geliefert wurde, benötigen Sie ein zusätzliches 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
    -- Ihr Code zum Löschen des Kunden hier
   else
    -- Fehler auslösen, Nachricht anzeigen, ...
   end if;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X