Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como meu script sql pode determinar se ele está sendo executado no sqldeveloper ou no sqlplus?


Não estou familiarizado com um bug de tamanho de linha do SQL Developer, portanto, não tenho certeza de qual deve ser o resultado final. Mas você pode usar sys_context por esta:
select sys_context('USERENV', 'MODULE') from dual;

Que dá:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus

... ou:
SYS_CONTEXT('USERENV','MODULE')                                           
-------------------------------
SQL Developer 

Então você pode adaptar o que você tem 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

E depois teste com
show linesize

que dá linesize 500 em SQL*Plus e linesize 5 em SQL Developer.

Se você ainda não estiver conectado no SQL*Plus, apenas defina o valor primeiro; você nem precisa fazer nada especial para ocultar o erro do select além do set termout off , embora você possa incluir um whenever sqlerror apenas no caso de seu login.sql está configurando-o para sair - mas talvez você precise redefini-lo depois.
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

A column value irá substituí-lo se a seleção for bem-sucedida e não tocá-lo se falhar. Se eu colocar isso em um arquivo chamado client.sql e execute-o como:
sqlplus -s /nolog @client

Eu só recebo esta saída:
linesize 500

E a mesma coisa é executada no SQL Developer, dando linesize 5 novamente.