Oracle 10G - Erreur ORA-01747
Question
Ma procédure:
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;
Lorsque j'essaie d'exécuter ce code dans Oracle 10G Express Edition, j'obtiens cette erreur: cependant:
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
Je ne vois pas de mots réservés dans mon code, alors pourquoi est-ce que je reçois cette erreur?
La solution
Vous avez une virgule étrangère à
UPDATE Auta SET
poplatok_denny = denny_poplatok,
WHERE id_auto = my_id_auto;
Autres conseils
Probablement une erreur que vous auriez évité si vous suivez la règle d'or: n'utilisez jamais PL / SQL lorsque vous pouvez utiliser 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 ;
Non vérifié pour la syntaxe (ou qu'il correspond exactement à votre logique accidentellement), mais c'est plus rapide et moins complexe que la méthodologie du curseur explicite. Le commit à l'intérieur du curseur est également une très mauvaise pratique.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow