DBMS_OUTPUT.PUT_LINE not printing

当执行下面的代码时,它只是说过程已经完成,并且没有打印我想要的信息(firstName,lastName) ,然后在下面的表中打印选择查询中的其他值。

 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

很多次!

547319 次浏览

什么是“它”在声明“它只是说程序已经完成”?

默认情况下,大多数工具不会为 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 Output 窗口,然后按下绿色加号图标以启用特定会话的 DBMS Output。

Additionally, assuming that you don't want to print the literal "a.firstNamea.lastName" for every row, you probably want

FOR row IN quote_recs
LOOP
DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;

这份声明

DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');

意味着按原样打印字符串. . 删除引号以获得要打印的值

DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);

它们都集中在 for 循环上,但是如果我们使用一个普通的循环,那么我们必须使用 cursor record 变量。下面是修改后的代码

 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;
/
  1. Ensure that you have your Dbms Output window open through the view option in the menubar.
  2. 单击绿色的“ +”标志并添加数据库名称。
  3. 在过程中写入“ DBMS _ OUTPUT. ENABLE;”作为第一行。 Hope this solves your problem.

在第一行设置 Query 如下

SET SERVEROUTPUT ON

我正在使用 Oracle SQL 开发器,

在这个工具中,我必须使用 启用数据库管理系统输出来查看 dbms _ output. put _ line 打印的结果

您可以在显示其他查询结果的结果窗格中找到此选项。 因此,在结果窗格中,我有7个选项卡。第一个选项卡命名为 Results,下一个是 Script Output 等。在这个选项卡中,您可以找到一个名为“ DBMS Output”的选项卡,选择这个选项卡,然后第一个图标(看起来像一个对话图标)是 Enable DBMS Output。点击这个图标。然后执行 PL/SQL,然后选择“ DBMS Output”选项卡,您应该能够在那里看到结果。

用于 SQL 开发人员

你必须手动执行

SET SERVEROUTPUT ON

之后,如果使用 DBMS _ OUTPUT. PUT _ LINE (‘ info’)执行任何过程; 或者直接执行。

这将打印这行

请不要再加这个了

 SET SERVEROUTPUT ON

inside the definition of function and procedure, it will not compile and will not work.

enter image description here

在 OracleSQLDeveloper 中,可以按照如下图所示的步骤逐步执行: