PL / SQL和SQL之间的区别。选择进入

时间:2013-07-05 15:21:54

标签: sql forms oracle plsql

我在PL / 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 Navigator中运行这段代码时:

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 个答案:

答案 0 :(得分:1)

从错误看,它似乎是将关键字'join'解释为表别名,这很奇怪,可能意味着你使用的是Oracle添加ANSI连接之前的版本 - 我不使用Forms所以我不知道那要多大年纪。您可以在非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;

......虽然对表格进行别名化仍然会让它更清晰。

相关问题