繁体   English   中英

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

[英]Difference between PL/SQL and SQL. Select into

我在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

从错误中看来,它似乎将关键字“ 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;

...尽管对表进行别名处理仍会使其更清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM