Jeg er ikke bekendt med en SQL Developer-linjestørrelsesfejl, så jeg er ikke sikker på, hvad slutresultatet skal være. Men du kan bruge sys_context
til dette:
select sys_context('USERENV', 'MODULE') from dual;
Hvilket giver:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... eller:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Så du kan tilpasse 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
Og test derefter med
show linesize
hvilket giver linesize 500
i SQL*Plus og linesize 5
i SQL Developer.
Hvis du måske ikke er tilsluttet endnu i SQL*Plus, skal du blot definere værdien først; du behøver ikke engang at gøre noget særligt for at skjule fejlen fra select
ud over den set termout off
, selvom du kunne inkludere en whenever sqlerror
bare i tilfælde af at din login.sql
indstiller den til at afslutte - men så skal du måske vide for at nulstille den bagefter.
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ærdi vil tilsidesætte det, hvis valget lykkes, og ikke røre ved det, hvis det mislykkes. Hvis jeg lægger det i en fil kaldet client.sql
og kør det som:
sqlplus -s /nolog @client
Jeg får kun dette output:
linesize 500
Og det samme kører i SQL Developer, hvilket giver linesize 5
igen.