![](/img/trans.png)
[英]What is difference between SQL 'select' and PL/SQL 'select' statements?
[英]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.