Não estou familiarizado com um bug de tamanho de linha do SQL Developer, portanto, não tenho certeza de qual deve ser o resultado final. Mas você pode usar
sys_context
por esta:select sys_context('USERENV', 'MODULE') from dual;
Que dá:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... ou:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Então você pode adaptar o que você tem como:
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
E depois teste com
show linesize
que dá
linesize 500
em SQL*Plus e linesize 5
em SQL Developer. Se você ainda não estiver conectado no SQL*Plus, apenas defina o valor primeiro; você nem precisa fazer nada especial para ocultar o erro do
select
além do set termout off
, embora você possa incluir um whenever sqlerror
apenas no caso de seu login.sql
está configurando-o para sair - mas talvez você precise redefini-lo depois. 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
A
column
value irá substituí-lo se a seleção for bem-sucedida e não tocá-lo se falhar. Se eu colocar isso em um arquivo chamado client.sql
e execute-o como:sqlplus -s /nolog @client
Eu só recebo esta saída:
linesize 500
E a mesma coisa é executada no SQL Developer, dando
linesize 5
novamente.