1

我定义了一个函数,它返回一个包含 5 个文本列的 sys_refcursor。对不起,出于商业原因,我不能在这里发布它的内容。这些列被转换为具有特定宽度 (9,4,10,10,10) 的 varchar2。铸造使我能够确保列宽是恒定的。

在 SQL Developer 1.5 中,打印脚本输出(使用 SQL 工作表中的 F5)将光标的内容很好地显示为:

MY_FUNCTION(input1,input2,input3)
---------------------------------
COLUMN1   COLU COLUMN3    COLUMN4    COLUMN5
--------- ---- ---------- ---------- ----------
18-NOV-14 TEXT SOME_DATA1 SOME_DATA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DATA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DATA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DATA2 SOME_DATA3

但是,在 SQL Developer 4.0 中,输出在函数调用的宽度处包装(类似于 SQLPlus 的 linesize 参数):

MY_FUNCTION(input1,input2,input3)
---------------------------------
COLUMN1   COLU COLUMN3    COLUMN4
    COLUMN5
--------- ---- ---------- -------
--- ----------
18-NOV-14 TEXT SOME_DATA1 SOME_DA
TA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DA
TA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DA
TA2 SOME_DATA3
18-NOV-14 TEXT SOME_DATA1 SOME_DA
TA2 SOME_DATA3

数据库版本为 11g。我尝试使用“set linesize 1000”命令,但输出仍然以相同的长度换行。但是,设置 linesize 5 会导致它在 5 个字符处换行。

输出在 SQL*Plus 中显示正常,无需使用任何“set”命令。

有没有办法防止光标内容在 4.0 中换行?

4

1 回答 1

0

不直接回答问题 - 我不知道为什么行为不同或如何在从查询中调用函数时更改它,除了使用column命令设置宽度,在这里使用别名稍微简化事情:

set lines 250
column rc format a250
select my_function(input1,input2,input3) as rc from dual;

但是你也可以通过不同的方式调用函数来得到你想要的输出;使用变量和匿名块(或execute速记):

variable rc refcursor;
exec :rc := MY_FUNCTION(input1,input2,input3);
print rc

好吧,几乎如你所愿;输出的第一行是变量名而不是函数/参数列表;但游标列未换行:

anonymous block completed
RC
---------------------------------------------------------------------------
COLUMN1                   COLUMN2 COLUMN3    COLUMN4    COLUMN5    
------------------------- ------- ---------- ---------- ---------- 
18-NOV-14                 text    some_data1 some_data2 some_data3 

您还可以从代码编辑器(而不是工作表)运行您的函数,它会为您生成一个匿名块;当您单击运行箭头(或按 control-F10)时,您会看到如下对话框:

在此处输入图像描述

运行它后,您会在主窗口底部获得一个“输出变量”选项卡,该选项卡在网格中显示光标输出。

运行时还可以看到网格视图select my_function(...) from dual。光标进入正常的“查询结果”窗口,但不是以非常友好的形式出现,如下所示:

{<COLUMN1=19-NOV-14,COLUMN2=text,COLUMN3=some_data1,COLUMN4=some_data2,COLUMN5=some_data3>,}

但是,如果您双击一个值,那么您会在该列的最右侧看到一个黄色铅笔符号,单击该符号会在其自己的网格中显示该光标。

我个人更喜欢print脚本输出中的选项,但无论如何我很少使用网格显示。

于 2014-11-18T23:59:54.660 回答