sql >> Database teknologi >  >> RDS >> Oracle

hvordan kan mit sql-script afgøre, om det kører i sqldeveloper eller sqlplus?

Jeg er ikke bekendt med en SQL Developer-linjestørrelsesfejl, så jeg er ikke sikker på, hvad slutresultatet skal være. Men du kan bruge sys_context til dette:

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

Hvilket giver:

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

... eller:

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

Så du kan tilpasse det du har som:

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

Og test derefter med

show linesize

hvilket giver linesize 500 i SQL*Plus og linesize 5 i SQL Developer.

Hvis du måske ikke er tilsluttet endnu i SQL*Plus, skal du blot definere værdien først; du behøver ikke engang at gøre noget særligt for at skjule fejlen fra select ud over den set termout off , selvom du kunne inkludere en whenever sqlerror bare i tilfælde af at din login.sql indstiller den til at afslutte - men så skal du måske vide for at nulstille den bagefter.

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

column værdi vil tilsidesætte det, hvis valget lykkes, og ikke røre ved det, hvis det mislykkes. Hvis jeg lægger det i en fil kaldet client.sql og kør det som:

sqlplus -s /nolog @client

Jeg får kun dette output:

linesize 500

Og det samme kører i SQL Developer, hvilket giver linesize 5 igen.



  1. PostgreSQL-syntaksfejl ved eller nær 'union'

  2. Hvornår skal du skifte til en større RDS-instans

  3. Hvordan får man den seneste besked i hver samtale fra en bestemt bruger i SQL?

  4. Sådan optimerer du SQL-forespørgsel med vinduesfunktioner