[英]Invalid identifier in Oracle SQL
我沒有在表中用雙引號創建任何columns(PAYMENTTERM)
,但仍然出現以下錯誤:
Error(26,9): PL/SQL: SQL Statement ignored
Error(27,29): PL/SQL: ORA-00904: "P"."PAYMENTTERM": invalid identifier
請指出我在做什么錯以及需要糾正的問題:
CREATE OR REPLACE
PROCEDURE PAYTERMUPDATE
IS
RecordCount INT;
BEGIN
SELECT
count(1) INTO RecordCount
FROM
docmeta d
INNER JOIN temp_pay_term p ON d.XPROJECT_ID = p.PID
WHERE
lower(d.PAYMENTTERM) <> lower(p.PAYMENTTERM);
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('There were '
|| to_char(RecordCount)
|| ' records where payment term is mismatch.');
DBMS_OUTPUT.PUT_LINE('');
FOR X IN (
SELECT p.PID, p.PAYMENTTERM
FROM docmeta d, temp_pay_term p
WHERE d.XPROJECT_ID = p.PID AND d.PAYMENTTERM <> p.PAYMENTTERM)
LOOP
UPDATE docmeta
SET d.PAYMENTTERM = p.PAYMENTTERM
WHERE XPROJECT_ID = X.PID;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-1000,
'Error occured, No payment term were updated');
END PAYTERMUPDATE;
在這一行:
UPDATE docmeta
SET d.PAYMENTTERM = p.PAYMENTTERM
WHERE XPROJECT_ID = X.PID ;
您必須在docmeta(d)上添加別名,並且p.PAYMENTTERM別名必須為X
因此,以這種方式更改您的查詢:
UPDATE docmeta d
SET d.PAYMENTTERM = X.PAYMENTTERM
WHERE XPROJECT_ID = X.PID ;
在您的情況下,將循環變量用作PAYMENTTERM
別名,即X
,還將DOCMETA
別名聲明為d
。
嘗試這個?
LOOP
UPDATE docmeta d
SET d.PAYMENTTERM = p.PAYMENTTERM
WHERE XPROJECT_ID = X.PID ;
END LOOP;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.