Je ne suis pas familier avec un bogue de taille de ligne SQL Developer, donc je ne sais pas quel est le résultat final. Mais vous pouvez utiliser sys_context
pour cela :
select sys_context('USERENV', 'MODULE') from dual;
Ce qui donne :
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... ou :
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Vous pouvez donc adapter ce que vous avez comme :
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
Et puis testez avec
show linesize
ce qui donne linesize 500
en SQL*Plus et linesize 5
dans SQL Developer.
Si vous n'êtes peut-être pas encore connecté à SQL*Plus, définissez simplement la valeur en premier; vous n'avez même pas besoin de faire quoi que ce soit de spécial pour masquer l'erreur du select
au-delà de set termout off
, bien que vous puissiez inclure un whenever sqlerror
juste au cas où votre login.sql
est en train de le configurer pour quitter - mais vous devrez peut-être savoir le réinitialiser par la suite.
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
La column
la valeur la remplacera si la sélection réussit et ne la touchera pas si elle échoue. Si je mets cela dans un fichier appelé client.sql
et exécutez-le en tant que :
sqlplus -s /nolog @client
Je n'obtiens que cette sortie :
linesize 500
Et la même chose s'exécute dans SQL Developer, donnant linesize 5
à nouveau.