我不熟悉 SQL Developer linesize 错误,因此不确定最终结果应该是什么。但是您可以为此使用sys_context:
select sys_context('USERENV', 'MODULE') from dual;
这给出了:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... 或:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
所以你可以调整你所拥有的:
column set_the_line new_value targetlinesize noprint
set termout off
select case sys_context('USERENV', 'MODULE')
when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
set termout on
set linesize &&targetlinesize
然后测试
show linesize
在 SQL*Plus 中提供 linesize 500,在 SQL Developer 中提供 linesize 5。
如果您可能尚未在 SQL*Plus 中连接,只需先定义值;你甚至不需要做任何特别的事情来隐藏select 之外的set termout off 的错误,尽管你可以包含一个whenever sqlerror 以防你的login.sql 将它设置为退出 - 但是你也许必须知道之后重置它。
define targetlinesize=500
whenever sqlerror continue
set termout off
column set_the_line new_value targetlinesize noprint
select case sys_context('USERENV', 'MODULE')
when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
set termout on
set linesize &&targetlinesize
show linesize
如果选择成功,column 值将覆盖它,如果选择失败,则不会触及它。如果我把它放在一个名为client.sql 的文件中并运行它:
sqlplus -s /nolog @client
我只得到这个输出:
linesize 500
同样的事情在 SQL Developer 中运行,再次给出linesize 5。