oracle 10.2.0 如何在plsql 里设置 dbms_output.put_line 打印长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 10.2.0 如何在plsql 里设置 dbms_output.put_line 打印长度相关的知识,希望对你有一定的参考价值。

我是在执行一个带有打印语句的存储过程,因要打印的语句特别长,每次执行都会报“ORA-06502:数字或值错误,字符串缓冲区太小”,查了下“对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767. 如果报错buffer overflow,
执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT
WORD_WRAPPED
对于10g以下版本dbms_output.put_line最大长度限制是255.” 这语句是在sqlplus里执行的,如何在plsql里设置?求助。。。

参考技术A dbms_output.enable(buffer_size => NULL);追问

不对,不过谢谢了

如何在 PLSQL Developer 中测试包含 DML 的 Oracle 函数?

【中文标题】如何在 PLSQL Developer 中测试包含 DML 的 Oracle 函数?【英文标题】:How to test an Oracle function that contains DML in PLSQL Developer? 【发布时间】:2009-12-12 22:39:36 【问题描述】:

选择不包含 DML 的 Oracle 存储函数的返回值,只需选择函数即可:

select function_name() from dual;

如果函数包含 DML(在这种情况下,一些插入记录传递给函数的参数),则不允许上述查询。 (ORA-14551)

如何选择/查看该函数的返回值?

如果我在 plsql developer 中选择“测试”,plsqldev 会产生类似:

declare
  -- Non-scalar parameters require additional processing 
  result xmltype;
begin
  -- Call the function
  result := find_person(as_surname => :as_surname,
                       as_given => :as_given,
                       ad_birth_date_from => :ad_birth_date_from,
                       ad_birth_date_to => :ad_birth_date_to,
                       as_gender => :as_gender);
end;

如何查看“结果”变量的值?

select result from dual;

在开始/结束块内产生

ORA-06550: PLS-00428: an INTO clause is expected in this SELECT statement

【问题讨论】:

【参考方案1】:

将“result”更改为“:result”,然后单击变量网格左上角的小箭头。 它应该添加“结果”作为绑定变量,您可以指定它的类型。

在您的情况下,最好的选择是 clob 或 PL/SQL 字符串。

您的脚本可能如下所示:

declare
  result xmltype;
begin
  result := find_person(as_surname => :as_surname,
                        as_given => :as_given,
                        ad_birth_date_from => :ad_birth_date_from,
                        ad_birth_date_to => :ad_birth_date_to,
                        as_gender => :as_gender);
  if result is null then
    :result := null;
  else
    :result := result.GetClobVal();
  end if;
end;

如您所见,它基本上是 PL/SQL Dev 为您创建的,除了处理如何以 PL/SQL Dev 理解的方式返回 xmltype。

如果要返回结果集,可以返回游标:

begin
  ...
  open :someCursor for 
    select 1 from ...;
  ...

您必须将变量网格中的“someCursor”类型更改为“cursor”,否则它将不起作用。

【讨论】:

【参考方案2】:

我没有使用过 xmltype,但文档提供了以下选项:

dbms_output.put_line(result.getStringVal());

【讨论】:

【参考方案3】:

添加

pragma autonomous_transaction 

declare 块中的函数允许从对偶中选择它

select find_person(arguments) from dual;

由于函数中的 DML 只是用于记录传递给函数的参数,因此使用自主事务是可以接受的,否则应避免

【讨论】:

真的,你应该有一个被调用的日志过程 使用autonomous_transaction 进行日志记录通常是个坏主意。您必须提交您的日志记录,然后如果主事务回滚,则无法始终看到用户实际做了什么。 不仅如此,让一个函数自治以便您可以从 SQL 调用它可能会产生灾难性的副作用【参考方案4】:

pragma_autonomous_transaction 是一种方式。

但要在不影响您的原始数据库的情况下进行测试,很少有开源工具可以测试您的 SQL / PLSQL,例如 DBUNIT、utPLSQL 等。

这些是 SQL 和 plsql 的单元测试工具

【讨论】:

【参考方案5】:

PLSQL developer 中的测试屏幕有两个部分。在上半部分,您将找到您在问题中显示的代码。测试函数生成的代码已将函数的变量替换为绑定变量::as_surname、:as_given 等。 在屏幕下方,您可以输入这些参数的值并查看结果值。

【讨论】:

【参考方案6】:

SQL Developer 与 DBMS_OUTPUT 配合得很好。它在脚本输出、结果等旁边有一个单独的选项卡。只需单击“启用输出”小按钮并在代码中使用 DBMS_Output.Put_Line(result);

【讨论】:

以上是关于oracle 10.2.0 如何在plsql 里设置 dbms_output.put_line 打印长度的主要内容,如果未能解决你的问题,请参考以下文章

为啥打开PLSQL Developer时会报TNS无法监听程序

请教如何利用PLSQL建oracle表,建表空间,设置管理,导入导出数据?

PLSQL 使用技巧 常用设置 卡顿问题 病毒防范

急! 换电脑之前PLSQL可以正常登陆 换电脑后PLSQL和 ORACLE 都没重装 现在运行plsql登录错误,有空白提示框

如何配置PLSQL在64位 win7系统上?已经试过网上所有的方法还是报错

怎样用plsql 简单连接oracle32位客户端