오라클 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;
Oracle 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;
다른 팁
아마도 황금률을 따랐다면 피할 수 있었을 실수는 다음과 같습니다.SQL을 사용할 수 있으면 PL/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