我在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;
当我尝试编译时,我看到了错误:
但是,当我在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
答案 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;
......虽然对表格进行别名化仍然会让它更清晰。