sql >> Database >  >> RDS >> Oracle

hoe kan mijn sql-script bepalen of het wordt uitgevoerd in sqldeveloper of sqlplus?

Ik ben niet bekend met een SQL Developer linesize-bug, dus ik weet niet zeker wat het eindresultaat zou moeten zijn. Maar u kunt sys_context gebruiken hiervoor:

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

Wat geeft:

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

... of:

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

Dus je kunt aanpassen wat je hebt 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

En dan testen met

show linesize

wat linesize 500 . geeft in SQL*Plus en linesize 5 in SQL Developer.

Als je nog niet verbonden bent in SQL*Plus, definieer dan eerst de waarde; je hoeft niet eens iets speciaals te doen om de fout te verbergen voor de select voorbij de set termout off , hoewel u een whenever sqlerror . kunt opnemen voor het geval uw login.sql is het instellen om af te sluiten - maar dan moet je misschien weten om het daarna opnieuw in te stellen.

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

De column waarde zal het overschrijven als de selectie slaagt, en niet aanraken als het mislukt. Als ik dat in een bestand met de naam client.sql plaats, en voer het uit als:

sqlplus -s /nolog @client

Ik krijg alleen deze uitvoer:

linesize 500

En hetzelfde werkt in SQL Developer, en geeft linesize 5 opnieuw.



  1. Hoe krijg ik traceringsinformatie voor bindingsvariabelen die via OracleParameter in ODP.NET worden doorgegeven?

  2. SSL/TLS inschakelen voor MySQL in Ubuntu

  3. Oracle 12.2 Sharding

  4. Hoe tekenreeks naar tijdstempel te converteren zonder tijdzone