Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann mein SQL-Skript feststellen, ob es in sqldeveloper oder sqlplus läuft?

Ich bin mit einem Zeilengrößenfehler von SQL Developer nicht vertraut, daher bin ich mir nicht sicher, was das Endergebnis sein soll. Aber Sie können sys_context verwenden dazu:

select sys_context('USERENV', 'MODULE') from dual;

Was ergibt:

SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus

... oder:

SYS_CONTEXT('USERENV','MODULE')                                           
-------------------------------
SQL Developer 

So können Sie anpassen, was Sie haben 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

Und dann mit

testen
show linesize

was linesize 500 ergibt in SQL*Plus und linesize 5 in SQL Developer.

Wenn Sie möglicherweise noch nicht in SQL*Plus verbunden sind, definieren Sie einfach zuerst den Wert; Sie müssen nicht einmal etwas Besonderes tun, um den Fehler vor select zu verbergen über den set termout off hinaus , obwohl Sie einen whenever sqlerror einfügen könnten für alle Fälle Ihre login.sql setzt es zum Beenden - aber dann müssen Sie vielleicht wissen, ob Sie es danach zurücksetzen müssen.

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

Die column Der Wert überschreibt ihn, wenn die Auswahl erfolgreich ist, und berührt ihn nicht, wenn er fehlschlägt. Wenn ich das in eine Datei namens client.sql stecke und führen Sie es aus als:

sqlplus -s /nolog @client

Ich bekomme nur diese Ausgabe:

linesize 500

Und dasselbe läuft in SQL Developer, was linesize 5 ergibt nochmal.