执行以下代码时,它只是表示该过程已完成,并且不会打印我想要的信息(名字,姓氏),然后打印下表中选择查询中的其他值。
CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
a.actorID = id_actor;
BEGIN
FOR row IN quote_recs LOOP
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');
end loop;
END PRINT_ACTOR_QUOTES;
/
当设置服务器输出时,我得到
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
多次!
“它只是说程序已完成”这句话中的“它”是什么?
默认情况下,大多数工具不会为
dbms_output
配置要写入的缓冲区,并且在代码执行后不会尝试从该缓冲区读取数据。另一方面,大多数工具都有能力这样做。在 SQL*Plus 中,您需要使用命令 set serveroutput on [size N|unlimited]
。所以你会做类似的事情
SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );
在 SQL Developer 中,您可以转到
View | DBMS Output
启用 DBMS 输出窗口,然后按绿色加号图标为特定会话启用 DBMS 输出。
此外,假设您不想为每一行打印文字“a.firstNamea.lastName”,您可能需要
FOR row IN quote_recs
LOOP
DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;
在第一行设置查询如下
SET SERVEROUTPUT ON
此声明
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');
意味着按原样打印字符串.. 删除引号以获取要打印的值。所以正确的语法是
DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);
对于 SQL 开发人员
您必须手动执行
SET SERVEROUTPUT ON
之后,如果您使用 DBMS_OUTPUT.PUT_LINE('info'); 执行任何过程;或直接.
这将打印该行
请不要尝试添加此内容
SET SERVEROUTPUT ON
在函数和过程的定义中,它不会编译并且不起作用。
我正在使用 Oracle SQL Developer,
在这个工具中,我必须启用 DBMS 输出才能查看 dbms_output.put_line 打印的结果
您可以在显示其他查询结果的结果窗格中找到此选项。 所以,在结果窗格中,我有 7 个选项卡。第一个选项卡名为“结果”,下一个选项卡是“脚本输出”,依此类推。其中您可以找到一个名为“DBMS Output”的选项卡,选择此选项卡,然后第一个图标(看起来像对话框图标)是Enable DBMS Output。单击此图标。然后执行 PL/SQL,然后选择“DBMS Output”选项卡,您应该能够在那里看到结果。
所有这些都集中在 for 循环上,但是如果我们使用普通循环,那么我们必须使用游标记录变量。以下是修改后的代码
CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
a.actorID = id_actor;
recd quote_recs%rowtype;
BEGIN
open quote_recs;
LOOP
fetch quote_recs into recs;
exit when quote_recs%notfound;
DBMS_OUTPUT.PUT_LINE(recd.firstName||recd.lastName);
end loop;
close quote_recs;
END PRINT_ACTOR_QUOTES;
/
也许您正在脚本输出窗口中看到输出。 从“视图”菜单中打开“Dbms 输出”窗口,然后单击绿色加号图标,必须选择您的连接名称,然后按“确定”。还要确保在查询窗口中选择正确的连接名称。