簡體   English   中英

Oracle SQL中的無效標識符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM