Nejsem obeznámen s chybou velikosti řádků SQL Developer, takže si nejsem jistý, jaký by měl být konečný výsledek. Můžete však použít sys_context
pro toto:
select sys_context('USERENV', 'MODULE') from dual;
Což dává:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... nebo:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Takže si můžete přizpůsobit to, co máte, 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 poté otestujte pomocí
show linesize
což dává linesize 500
v SQL*Plus a linesize 5
v SQL Developer.
Pokud možná ještě nejste připojeni v SQL*Plus, definujte nejprve hodnotu; pro skrytí chyby před select
ani nemusíte dělat nic zvláštního za set termout off
, i když můžete zahrnout whenever sqlerror
jen pro případ, že váš login.sql
nastavuje jej na ukončení – ale pak možná budete muset vědět, abyste jej poté resetovali.
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
hodnota ji přepíše, pokud bude výběr úspěšný, a nedotkne se, pokud selže. Pokud to dám do souboru s názvem client.sql
a spusťte jej jako:
sqlplus -s /nolog @client
Dostávám pouze tento výstup:
linesize 500
A totéž běží v SQL Developer, dává linesize 5
znovu.