2017-05-04 25 views
1

我有以下Oracle PL/SQL隱式遊標循環:如何隱式遊標循環引用一個別名的列

FOR c IN 
(
    SELECT 1 AS "mycol",column2 FROM DUAL 
    UNION ALL 
    SELECT 2 AS "mycol",column2 FROM DUAL 
) 
LOOP 
    DBMS_OUTPUT.PUT_LINE(c.mycol); 
END LOOP; 

當我跑我得到錯誤信息

PLS-00302 ;組件'mycol'必須聲明。

如何在隱式遊標循環中顯式插入列「mycol」?

+2

'DBMS_OUTPUT.PUT_LINE(c。「mycol」);' – Mike

+0

默認情況下oracle上的所有名字都是大寫。 'c.mycol'相當於'c。「MYCOL」'不是''mycol「' – Mike

回答

2

「我該如何在隱式遊標循環中顯式插入'mycol'列?」

這不是mycol它是"mycol"。你用雙引號標記它,使其區分大小寫。如果我們命名我們有對象時使用它們:所以要麼改變你的參考...

DBMS_OUTPUT.PUT_LINE(c."mycol"); 

...或者,更好,更改列別名:

SELECT 1 AS mycol, column2 FROM DUAL 

雙引號的標識符調皮小心使用雙引號和之後完全相同的情況。除了標識符全部是大寫字母之外。然後雙引號是可選的。 "MYCOL"MYCOL是等效的,確實是mycol

最好的辦法是避免使用雙引號,除非你有一個緊迫的理由這樣做。

+0

如果可以的話,我會給你+5。有關區分大小寫的有趣閱讀:https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9525305800346887676 –