2013-07-05 48 views
0

我在編譯PL/SQL中的簡單代碼時遇到問題。這裏談到的代碼:PL/SQL和SQL之間的區別。選擇到

DECLARE 
    zm VARCHAR(20); 
BEGIN 
    SELECT TEA_FIRST_NAME into zm 
    from students join teachers on STU_TEA_ID = TEA_ID 
    where STU_ID = (select k.STU_ID from students k where k.STU_FIRST_NAME = 
    :BLOCK9.TEXT_ITEM11); 
END; 

當我嘗試編譯這個我看到錯誤: Encountered the symbol error

然而,當我運行這段代碼在SQL導航:

SELECT TEA_FIRST_NAME 
from students join teachers on STU_TEA_ID = TEA_ID 
where STU_ID = (select k.STU_ID from students k where k.STU_FIRST_NAME = 
'Lukasz'); 

它運行良好並返回一條記錄。發生什麼事?

我正在使用Oracle Forms 10g(10.1.2.3.0)PL/SQL(10.1.0.5.0)。數據庫版本11.2.0.3.0

+1

您使用的是哪個版本的表格?哪個版本的數據庫? – APC

+0

嘗試用'INNER JOIN'替換'JOIN'。 –

回答

1

從錯誤中,它似乎將關鍵字'join'解釋爲表別名,這很奇怪,也許意味着您使用的版本在Oracle之前添加了ANSI連接 - 我不使用表格,所以我不知道那會多大。您可以在非Forms客戶端中運行相同的匿名塊來查看它應該工作。

明確走樣應該去除混亂的表:

DECLARE 
    zm VARCHAR(20); 
BEGIN 
    SELECT TEA_FIRST_NAME into zm 
    from students s join teachers t on s.STU_TEA_ID = t.TEA_ID 
    where STU_ID = (select k.STU_ID from students k where k.STU_FIRST_NAME = 
    :BLOCK9.TEXT_ITEM11); 
END; 

...但它似乎並不明白join它仍然不會這樣。如果真的是老,那麼你可能要恢復到舊的聯接語法:

DECLARE 
    zm VARCHAR(20); 
BEGIN 
    SELECT TEA_FIRST_NAME into zm 
    from students, teachers 
    where STU_TEA_ID = TEA_ID 
    and STU_ID = (select k.STU_ID from students k where k.STU_FIRST_NAME = 
    :BLOCK9.TEXT_ITEM11); 
END; 

...雖然走樣表仍然會使其更清晰。

+0

非常感謝。奇怪的是,它似乎不接受「加入」關鍵字。 另外我有別名,我已經清除他們只是爲了在這裏發佈代碼。 – kukis

相關問題