0

この手順コードは、新しい挿入物に割引を適用することです。私が抱えている問題は、フェッチされるレコードが多すぎることです。どうすればこれを修正できますか? トリガーまたは関数を使用しますか?

トリガーを作成しましたが、PLS-00103: Encountered the symbol "=" when expected one of the following: := を取得しています。( @ % ;

CREATE OR REPLACE PROCEDURE CHECK_DISCOUNT
AS

V_COUNT NUMBER;
V_C_NO APPOINTMENT.C_NO%TYPE;
V_BILL APPOINTMENT.BILL%TYPE;

BEGIN

SELECT C_NO,COUNT(C_NO)
INTO V_C_NO,V_COUNT
FROM APPOINTMENT
GROUP BY C_NO;

SELECT BILL
INTO V_BILL
FROM APPOINTMENT;

IF V_COUNT=3 THEN
V_BILL:=V_BILL * 0.9;
END IF;

UPDATE APPOINTMENT
SET BILL = V_BILL 
WHERE C_NO=:new.C_NO;
COMMIT;

END;
/

Create or replace TRIGGER CHECK_DISCOUNT 
BEFORE INSERT OR UPDATE OF C_NO ON APPOINT     
FOR EACH ROW 

DECLARE CURSOR C_APPTMENT IS 
SELECT C_NO,COUNT(C_NO) 
FROM APPOINTMENT GROUP BY C_NO; 

VISIT NUMBER; V_C_NO APPOINTMENT.C_NO%TYPE; 
V_BILL APPOINTMENT.BILL%TYPE; 
V_TEN NUMBER(3):=0.9; 

BEGIN 
   LOOP 
            OPEN C_APPTMENT; FETCH C_APPTMENT INTO V_C_NO, VISIT;
            EXIT WHEN C_APPTMENT%NOTFOUND; 

  SELECT BILL INTO V_BILL FROM APPOINTMENT; 
  IF VISITS =3 THEN V_BILL=V_BILL * V_TEN 
  WHERE :NEW.C_NO=V_C_NO; 
  UPDATE APPOINTMENT SET BILL:= V_BILL 
  WHERE:NEW.C_NO=V_C_NO; 
    END LOOP; 
      CLOSE C_APPTMENT; 

終わり;

4

1 に答える 1