【发布时间】:2013-11-12 04:29:46
【问题描述】:
当我执行程序时,会出现 nth,除了以下消息并且不显示任何不应出现的输出:匿名块已完成
我试过set serveroutput on size 50000,但没有任何改变。
这是我的 PL/SQL 过程,不确定我是否做得对。
CREATE OR REPLACE PROCEDURE verify AS
empnum NUMBER;
empname VARCHAR2(50);
fail EXCEPTION;
BEGIN
SELECT employee.e#, employee.name INTO empnum, empname
FROM employee
JOIN driver ON driver.e# = employee.e#
JOIN mechanic ON mechanic.e# = driver.e#
WHERE rownum = 1;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('ok');
RAISE fail;
END verify;
/
我正在尝试使用sql语句实现以下结果:
SELECT employee.e#, employee.name
FROM employee
JOIN driver ON driver.e# = employee.e#
JOIN mechanic ON mechanic.e# = driver.e#
WHERE rownum = 1;
因此,如果有任何类似的记录,它将显示员工姓名和人数。如果没有找到类似的记录,它将显示ok 消息。
【问题讨论】:
-
你期望什么输出?假设所有三个表中都有数据并且连接关系正确,您的查询将使用任意
e#和name填充两个局部变量。然后,您不会对这两个局部变量做任何事情。我也不确定在这里声明fail异常有什么好处。 -
@JustinCave 嗨,感谢您的及时回复。我已经更新了关于我想要实现什么的问题,但我不确定它是否会起作用..
-
目标是在结果中显示多行吗?还是您只想显示任意一行?后者对我来说没有多大意义,但这就是您的
rownum = 1子句所暗示的。您是否只是从书中学习 PL/SQL(在这种情况下将数据写入dbms_output可能是合理的)?或者您是否尝试在现实世界中使用 PL/SQL(在这种情况下,取决于dbms_output是错误的)? -
@JustinCave 我实际上是在从一本书中学习。我注意到他们实际上会使用
dbms_output。如果有多个相似的记录,它将显示所有这些记录。所以我想我应该删除rownum=1? -
这里的“相似”是什么意思?就目前而言,您没有做任何事情来将表中的数据与任何寻找“相似”行的数据进行比较。你的意思是有一个除
rownum=1之外的谓词吗?
标签: oracle stored-procedures plsql