DBMS_OUTPUT.PUT_LINE无法打印

dex*_*ter 81 plsql sqlplus oracle10g dbms-output

执行以下代码时,它只是说过程已完成,并且不打印我想要的信息(firstName,lastName),然后是下表中select查询的其他值.

 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;
/ 
Run Code Online (Sandbox Code Playgroud)

当设置服务器输出时,我得到

a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
Run Code Online (Sandbox Code Playgroud)

多次!

Jus*_*ave 163

什么是"它"在声明"它只是说程序完成"?

默认情况下,大多数工具都不配置dbms_output写入缓冲区,也不会在代码执行后尝试从该缓冲区读取.另一方面,大多数工具都有能力这样做.在SQL*Plus中,您需要使用该命令set serveroutput on [size N|unlimited].所以你会做类似的事情

SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );
Run Code Online (Sandbox Code Playgroud)

在SQL Developer中,您将View | DBMS Output启用DBMS Output窗口,然后按绿色加号图标以启用特定会话的DBMS输出.

另外,假设您不想为每一行打印文字"a.firstNamea.lastName",您可能想要

FOR row IN quote_recs
LOOP
  DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;
Run Code Online (Sandbox Code Playgroud)

  • @dexter - 好的.然后你只需要在执行SQL*Plus中的过程之前添加`set serveroutput on`命令. (7认同)

小智 19

在此输入图像描述

在Oracle SQL Developer中,您可以按照下图一步一步操作:


小智 17

  1. 确保通过菜单栏中的视图选项打开"Dbms输出"窗口.
  2. 单击绿色的"+"符号并添加您的数据库名称.
  3. 写'DBMS_OUTPUT.ENABLE;' 在你的程序中作为第一行.希望这能解决你的问题.


Jee*_*evi 14

这个说法

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

意味着按原样打印字符串.. 删除引号以获取要打印的值.所以正确的语法是

DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);
Run Code Online (Sandbox Code Playgroud)


Cur*_*Dev 13

对于 SQL 开发人员

你必须手动执行它

SET SERVEROUTPUT ON 
Run Code Online (Sandbox Code Playgroud)

之后,如果您使用 DBMS_OUTPUT.PUT_LINE('info'); 执行任何过程;或直接 .

这将打印该行

并且请不要尝试添加此内容

 SET SERVEROUTPUT ON
Run Code Online (Sandbox Code Playgroud)

在函数和过程的定义内,它将无法编译并且无法工作。


小智 6

在第一行中将查询设置如下

SET SERVEROUTPUT ON 
Run Code Online (Sandbox Code Playgroud)