ребята, я понятия не имею, почему я получаю эту ошибку здесь, это код. Какая точность требует int? Я назначаю целое число PATIENT_SSA. Я попытался также присвоить это десятичной (19,2), но это не сработало.Ошибка Oracle (6,26): PLS-00103
CREATE TRIGGER TRIDOWYW
BEFORE INSERT ON PRESCRIPTION_BILLS
FOR EACH ROW
DECLARE
PATIENTID INT;
PHARMACY_SSA INT;
PATIENT_SSA INT;
PHARMACYID INT;
TOTAL_FOR_MEDICINE DOUBLE;
PATIENTINSURANCEPERCENT DOUBLE;
BEGIN
SELECT PATIENT_ID INTO PATIENTID
FROM PRESCRIPTIONS
WHERE PRESCRIPTION_ID = :NEW.PRESCRIPTION_ID;
SELECT PHARMACY_ID INTO PHARMACYID
FROM PRESCRIPTIONS
WHERE PRESCRIPTION_ID = :NEW.PRESCRIPTION_ID;
SELECT SSA_ID INTO PATIENT_SSA
FROM PATIENTS JOIN KIND_OF_INSURANCES USING (INSURANCE_ID)
WHERE PATIENT_ID=PATIENTID;
SELECT SSA_ID INTO PHARMACY_SSA
FROM CONTRACTS_WITH_PHARMACY
WHERE SSA_ID=PATIENT_SSA AND PHARMACY_ID = PHARMACYID AND SYSDATE BETWEEN BEGIN_DATE AND END_DATE;
SELECT SUM(MEDICINE.PRICE) AS SUM1 INTO TOTAL_FOR_MEDICINE
FROM MEDICINE_ON_PRESCRIPTION JOIN MEDICINE USING (MEDICINE_ID)
WHERE PRESCRIPTION_ID = :NEW.PRESCRIPTION_ID;
IF(PHARMACY_SSA)THEN
SELECT PERCENTAGE.PERCENTAGE_VALUE/100 INTO PATIENTINSURANCEPERCENT
FROM (PATIENTS JOIN KIND_OF_INSURANCES USING (INSURANCE_ID)) JOIN PERCENTAGE USING (PERCENTAGE_ID)
WHERE PATIENTS.PATIENT_ID = PATIENT_ID;
:NEW.TO_PAY_BY_PATIENT:= TOTAL_FOR_MEDICINE * PATIENTINSURANCEPERCENT;
:NEW.TO_PAY_BY_SSA := TOTAL_FOR_MEDICINE - :NEW.TO_PAY_BY_PATIENT;
ELSE
:NEW.TO_PAY_BY_PATIENT:= TOTAL_FOR_MEDICINE;
:NEW.TO_PAY_BY_SSA :=0;
END IF;
END;
/
ОК отредактировал спасибо. –
Что такое полный стек ошибок и сообщение? Является ли эта часть скрипта или нескольких операторов, с которыми вы работаете вместе? Строка 6 не является PATIENT_SSA, ошибка PL/SQL будет считать строки из DECLARE; но фактическая строка 6, TOTAL_FOR_MEDICINE, тоже выглядит нормально. Хотя я бы использовал число с точностью/шкалой, а не с двойным. Так что это, вероятно, не из этого бита кода ... –
Изменения от двойного до числа помогли спасибо! –