Oracle 10G - خطأ ORA-01747
سؤال
الإجراء الخاص بي:
CREATE OR REPLACE PROCEDURE akcia_nepozicane_s_kurzorom
(denny_poplatok IN NUMBER,
kilometrovy_poplatok IN NUMBER)
AS
my_id_auto NUMBER(5);
my_poplatok_denny NUMBER(4);
my_poplatok_km NUMBER(2);
CURSOR c1 IS
SELECT id_auto, poplatok_denny, poplatok_km FROM Auta;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO my_id_auto, my_poplatok_denny, my_poplatok_km;
EXIT WHEN c1%NOTFOUND;
IF my_poplatok_km >= 10 THEN
UPDATE Auta SET
poplatok_denny = denny_poplatok,
poplatok_km = kilometrovy_poplatok
WHERE id_auto = my_id_auto;
ELSE
UPDATE Auta SET
poplatok_denny = denny_poplatok,
WHERE id_auto = my_id_auto;
END IF;
COMMIT;
END LOOP;
CLOSE c1;
END;
عندما أحاول تشغيل هذا الرمز في أوراكل 10G Express Edition، أحصل على هذا الخطأ على الرغم من:
ERROR at line 23: PL/SQL: ORA-01747: invalid user.table.column, table.column, or column specification
1. CREATE OR REPLACE PROCEDURE akcia_nepozicane_s_kurzorom
2. (denny_poplatok IN NUMBER,
3. kilometrovy_poplatok IN NUMBER)
4. AS
لا أرى أي كلمات محجوزة في الرمز الخاص بي فلماذا أحصل على هذا الخطأ؟
المحلول
لديك فاصلة غريبة في
UPDATE Auta SET
poplatok_denny = denny_poplatok,
WHERE id_auto = my_id_auto;
نصائح أخرى
ربما خطأ كنت قد تجنبت إذا اتبعت القاعدة الذهبية: لا تستخدم أبدا PL / SQL عندما يمكنك استخدام SQL
CREATE OR REPLACE PROCEDURE akcia_nepozicane_s_kurzorom
(denny_poplatok IN NUMBER,
kilometrovy_poplatok IN NUMBER)
AS
BEGIN
UPDATE Auta
Set poplatok_denny = akcia_nepozicane_s_kurzorom.denny_poplatok,
poplatok_km = Case When Auta.poplatok_km >= 10
then akcia_nepozicane_s_kurzorom.kilometrovy_poplatok
Else Auta.poplatok_km
End;
COMMIT;
END akcia_nepozicane_s_kurzorom ;
لم يتم التحقق من بناء الجملة (أو أنه يطابق بالضبط منطقك بالمنطق)، ولكن هذا أسرع وأقل تعقيدا من منهجية المؤشر الصريح. أيضا الالتزام داخل المؤشر ممارسة سيئة للغاية.
لا تنتمي إلى StackOverflow