Не съм запознат с грешка в размера на линията на SQL Developer, така че не съм сигурен какъв трябва да бъде крайният резултат. Но можете да използвате sys_context
за това:
select sys_context('USERENV', 'MODULE') from dual;
Което дава:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... или:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Така че можете да адаптирате това, което имате като:
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
И след това тествайте с
show linesize
което дава linesize 500
в SQL*Plus и linesize 5
в SQL Developer.
Ако все още не сте свързани в SQL*Plus, просто първо дефинирайте стойността; дори не е необходимо да правите нищо специално, за да скриете грешката от select
извън set termout off
, въпреки че можете да включите whenever sqlerror
само в случай, че вашият login.sql
го настройва да излезе - но тогава може би ще трябва да знаете, че след това трябва да го нулирате.
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
стойността ще го замени, ако изборът е успешен, и няма да го докосне, ако е неуспешен. Ако го поставя във файл, наречен client.sql
и го стартирайте като:
sqlplus -s /nolog @client
Получавам само този резултат:
linesize 500
И същото нещо работи в SQL Developer, като дава linesize 5
отново.