Oracle 10G - ORA -01747 Fehler
Frage
Mein Vorgang:
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;
Wenn ich versuche, diesen Code in Oracle 10g Express Edition auszuführen, erhalte ich jedoch einen Fehler:
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
Ich sehe keine reservierten Wörter in meinem Code. Warum bekomme ich diesen Fehler?
Lösung
Sie haben ein fremdes Komma bei
UPDATE Auta SET
poplatok_denny = denny_poplatok,
WHERE id_auto = my_id_auto;
Andere Tipps
Wahrscheinlich ein Fehler, den Sie vermieden hätten, wenn Sie der goldenen Regel folgen: Verwenden Sie niemals PL/SQL, wenn Sie SQL verwenden können
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 ;
Nicht auf Syntax überprüft (oder dass es genau zu Ihrer Logik übereinstimmt), aber dies ist schneller und weniger komplex als die explizite Cursormethode. Auch der Commit im Cursor ist eine sehr schlechte Praxis.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow