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.