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.