运行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。
然后里边加上一句
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 中程序包或者函数处于无效状态是啥原因造成的?请教!!