Ik ben niet bekend met een SQL Developer linesize-bug, dus ik weet niet zeker wat het eindresultaat zou moeten zijn. Maar u kunt sys_context
gebruiken
hiervoor:
select sys_context('USERENV', 'MODULE') from dual;
Wat geeft:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... of:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Dus je kunt aanpassen wat je hebt als:
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
En dan testen met
show linesize
wat linesize 500
. geeft in SQL*Plus en linesize 5
in SQL Developer.
Als je nog niet verbonden bent in SQL*Plus, definieer dan eerst de waarde; je hoeft niet eens iets speciaals te doen om de fout te verbergen voor de select
voorbij de set termout off
, hoewel u een whenever sqlerror
. kunt opnemen voor het geval uw login.sql
is het instellen om af te sluiten - maar dan moet je misschien weten om het daarna opnieuw in te stellen.
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
De column
waarde zal het overschrijven als de selectie slaagt, en niet aanraken als het mislukt. Als ik dat in een bestand met de naam client.sql
plaats, en voer het uit als:
sqlplus -s /nolog @client
Ik krijg alleen deze uitvoer:
linesize 500
En hetzelfde werkt in SQL Developer, en geeft linesize 5
opnieuw.