No estoy familiarizado con un error de tamaño de línea de SQL Developer, por lo que no estoy seguro de cuál se supone que es el resultado final. Pero puede usar sys_context
por esto:
select sys_context('USERENV', 'MODULE') from dual;
Lo que da:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... o:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Para que puedas adaptar lo que tienes como:
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
Y luego prueba con
show linesize
lo que da linesize 500
en SQL*Plus y linesize 5
en SQL Developer.
Si es posible que aún no esté conectado en SQL*Plus, simplemente defina el valor primero; ni siquiera necesita hacer nada especial para ocultar el error del select
más allá del set termout off
, aunque podría incluir un whenever sqlerror
por si acaso su login.sql
lo está configurando para salir, pero tal vez deba saber cómo restablecerlo después.
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
value lo anulará si la selección tiene éxito y no lo tocará si falla. Si pongo eso en un archivo llamado client.sql
y ejecutarlo como:
sqlplus -s /nolog @client
Solo obtengo esta salida:
linesize 500
Y lo mismo se ejecuta en SQL Developer, dando linesize 5
de nuevo.