我不熟悉 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
它提供linesize 500
了 SQL*Plus 和linesize 5
SQL Developer。
如果您可能尚未在 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
再次给出。