Jag är inte bekant med en SQL Developer-linjestorleksbugg, så jag är inte säker på vad slutresultatet ska bli. Men du kan använda sys_context
för detta:
select sys_context('USERENV', 'MODULE') from dual;
Vilket ger:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... eller:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Så du kan anpassa det du har som:
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
Och testa sedan med
show linesize
vilket ger linesize 500
i SQL*Plus och linesize 5
i SQL Developer.
Om du kanske inte är ansluten ännu i SQL*Plus, definiera bara värdet först; du behöver inte ens göra något speciellt för att dölja felet från select
bortom den set termout off
, även om du kan inkludera en whenever sqlerror
bara ifall din login.sql
ställer in den på att avsluta - men då kanske du måste veta för att återställa den efteråt.
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
värdet kommer att åsidosätta det om valet lyckas, och inte röra det om det misslyckas. Om jag lägger det i en fil som heter client.sql
och kör det som:
sqlplus -s /nolog @client
Jag får bara denna utdata:
linesize 500
Och samma sak körs i SQL Developer, vilket ger linesize 5
igen.