Nie znam błędu rozmiaru liniowego programu SQL Developer, więc nie jestem pewien, jaki powinien być wynik końcowy. Możesz jednak użyć sys_context
w tym celu:
select sys_context('USERENV', 'MODULE') from dual;
Co daje:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... lub:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Możesz więc dostosować to, co masz jako:
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
A następnie przetestuj za pomocą
show linesize
co daje linesize 500
w SQL*Plus i linesize 5
w SQL Developer.
Jeśli nie masz jeszcze połączenia w SQL*Plus, po prostu najpierw zdefiniuj wartość; nie musisz nawet robić nic specjalnego, aby ukryć błąd przed select
poza set termout off
, chociaż możesz dołączyć whenever sqlerror
na wszelki wypadek Twój login.sql
ustawia go na wyjście - ale być może będziesz musiał wiedzieć, aby później go zresetować.
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
value zastąpi go, jeśli wybór się powiedzie, i nie dotknie go, jeśli się nie powiedzie. Jeśli umieszczę to w pliku o nazwie client.sql
i uruchom go jako:
sqlplus -s /nolog @client
Otrzymuję tylko to wyjście:
linesize 500
I to samo działa w SQL Developer, dając linesize 5
ponownie.