运行pl/sql块显示结果,每次都要加set serveroutput on吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行pl/sql块显示结果,每次都要加set serveroutput on吗?相关的知识,希望对你有一定的参考价值。

参考技术A 如果pl/sql块中有dbms_output.put_line函数时,则可以加上set serveroutput on,

set serveroutput on的作用就是显示dbms_output.put_line函数的输出.
参考技术B 加一次就可以了呀,只要当前窗口没有关闭就可以一直输出的。追问

追答

如果用的plsql developer就只用加一次。如果要用sqlplus和pl/sql的话。要设置两个文件

    sqlplus的话,安装目录下找glogin.sql ,因为sqlplus打开的时候会自动加载这个文件。只要在其中加入ser serverouput on就不用每次都输了。

    PL/SQL的话,查找login.sql文件,在上面添加了set serveroutput on。

参考技术C 在你oracle安装目录下搜索glogin.sql文件

然后里边加上一句
set serveroutput on
保存

然后每次启动sqlplus的时候就能自动加载这句了,以后再sqlplus就没关系了追问

我用SQL>edit +目录打开了glogin.sql文件,加上set serveroutput on后,怎么保存,提示说要用管理员联系,我用管理员身份登录的还是这样.请问怎么保存啊?

追答

你不是用windows操作系统吗?直接去目录里找到文件加这一句就好了

追问

加了,但是没法保存的源目录。

追答

是不是目录写保护了,你设置一下 windows的权限
正常那个的话改了那个就可以了

本回答被提问者和网友采纳

PL/SQL 匿名块已完成但未显示结果

【中文标题】PL/SQL 匿名块已完成但未显示结果【英文标题】:PL/SQL anonymous block completed with no result displayed 【发布时间】: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之外的谓词吗? 【参考方案1】:

添加 dbms_out_put.put_line(empnum||empname); 在例外之前。 试试看/

【讨论】:

【参考方案2】:

您只是将列值选择到变量中,而不是显示它们。在 Select 语句之后使用 DBMS_OUTPUT.put_line('Empnum: '|| empnum||' Empname: '||empname);

【讨论】:

【参考方案3】:

你能指出你习惯的 FAIL 变量吗 引发异常。我们可以不使用这个变量来做到这一点。这 是参考程序。请尝试让我们知道它是否有效。谢谢

CREATE or REPLACE PROCEDURE av_sp_test(salary_var_1 in number)
AS
name_var avrajit.name%type;
salary_var avrajit.salary%type;
fail exception;
BEGIN
SELECT name,salary into name_var,salary_var from avrajit
WHERE salary=salary_var_1;
dbms_output.put_line('name is'||' '||name_var||' '||'salary is'||' '||salary_var);
EXCEPTION WHEN no_data_found THEN
dbms_output.put_line('OK');
END av_sp_test;

--------------------------------------------------

I have taken an input variable just to show diffrenet criterias.

begin
av_sp_test(1000);
end;
---------------------------------------------------
name is Sushil salary is 1000

Statement processed.

0.01 seconds
---------------------------------------------------

begin
av_sp_test(2000);
end;
---------------------------------------------------
OK

Statement processed.

0.00 seconds

【讨论】:

以上是关于运行pl/sql块显示结果,每次都要加set serveroutput on吗?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 匿名块已完成但未显示结果

PL/SQL 匿名块已完成”但未显示结果

PL/SQL 中程序包或者函数处于无效状态是啥原因造成的?请教!!

EXECUTE IMMEDIATE PL/SQL 块返回类型

Oracle 存储过程

SQLPLUS执行PL/SQL语句块