Non ho familiarità con un bug di dimensione lineare dello sviluppatore SQL, quindi non sono sicuro di quale dovrebbe essere il risultato finale. Ma puoi usare sys_context
per questo:
select sys_context('USERENV', 'MODULE') from dual;
Che dà:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... oppure:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Quindi puoi adattare ciò che hai come:
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 poi prova con
show linesize
che dà linesize 500 in SQL*Plus e linesize 5 in SQL Developer.
Se potresti non essere ancora connesso in SQL*Plus, definisci prima il valore; non devi nemmeno fare nulla di speciale per nascondere l'errore da select oltre il set termout off , anche se potresti includere un whenever sqlerror nel caso in cui il tuo login.sql lo sta impostando per uscire, ma forse devi sapere per ripristinarlo in seguito.
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
La column value lo sovrascriverà se la selezione ha esito positivo e non lo toccherà se fallisce. Se lo metto in un file chiamato client.sql ed eseguilo come:
sqlplus -s /nolog @client
Ottengo solo questo output:
linesize 500
E la stessa cosa viene eseguita in SQL Developer, fornendo linesize 5 di nuovo.