sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo puede mi script sql determinar si se está ejecutando en sqldeveloper o sqlplus?

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.