CREATE OR REPLACE procedure verify_data
IS
cursor c1 is
select
e.id
from
table1 e
where
id IN (select id from table1)
and id in (select id from table2);
BEGIN
FOR ed in c1
LOOP
DBMS_OUTPUT.PUT_LINE(ed.id||ed.name);
END LOOP;
END;
/
当我执行此PL / SQL时,它输出为
14Andrew R. Smith
我想问一下,我是如何通过格式化等方式将其输出为正常结果..还有
如果我直接在终端
运行select语句,会发生以下情况 ID NAME
---------- --------------------------------------------------
14 Andrew R. Smith
第一个问题: 如何使我的DBMS_OUTPUT.PUT_LINE与终端上显示的相同。比如ID,下面是ID数据和NAME等。
下一个问题:
我想问的是
如果输出如果游标为空或没有结果,我该如何输出i DBMS_OUTPUT.PUT_LINE(“NO RECORDS”);
感谢您的帮助!!
更新
我做了这个
CREATE OR REPLACE procedure verify_data
IS
cursor c1 is
select
e.id
from
table1 e
where
id IN (select id from table1)
and id in (select id from table2);
BEGIN
FOR ed in c1
LOOP
DBMS_OUTPUT.PUT_LINE(ed.id||ed.name);
if c1%notfound then
DBMS_OUTPUT.PUT_LINE('Okay');
end if;
END LOOP;
END;
但是当没有从PL / SQL获取记录时,它不会打印好的。我在END LOOP之后添加了c1%notfound
答案 0 :(得分:1)
由于您使用的是dbms_output,因此不会像普通的sql select语句那样获得任何标题。
所以我知道的唯一方法是打印自己的标题。 如果你在循环之前初始化一个计数器并在循环内增加它,你可以在循环后检查是否有结果。然后,如果需要,您可以打印“NO RECORDS”之类的消息。
答案 1 :(得分:1)
如果你想查看列名,你必须在循环之前再添加一行:
DBMS_OUTPUT.PUT_LINE('col1 col2 ...');
我认为这只是一种方法。
下面的代码显示了如何检查光标:
if c1%notfound then
DBMS_OUTPUT.PUT_LINE('NO RECORDS');
end if;
Here您可以找到有关游标属性的更多信息。
CREATE OR REPLACE procedure verify_data
IS
id number;
name varchar;
cursor c1 is
select
e.id,e.name
from
table1 e
where
id IN (select id from table1)
and id in (select id from table2);
BEGIN
open c1;
fetch c1 into id,name;
if c1%notfound then
DBMS_OUTPUT.PUT_LINE('OK')
EXIT;
else
DBMS_OUTPUT.PUT_LINE(id||name)
end if;
close c1;
END;