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

oracle plsql, hvis det ikke findes, gentag

Eksemplet nedenfor vil øjeblikkeligt genstarte unlock.sql, når der ikke er nogen låse for det pågældende projekt, ved at omdefinere kaldet til unlock.sql som et opkald til empty.sql, når mindst én række returneres.

set verify off

accept project prompt ' project : '

define doit = 'H:\Scripts\unlock.sql'
column doit new_value doit noprint
select 'H:\Scripts\empty.sql' as doit, locknr,description,couserid,ciuserid from dgdtw_lockedinfo where     
description = '&project' and ciuserid is null;
start &doit. 

accept lock prompt ' locknumber  : '

update dgdtw_lockedinfo set ciuserid = couserid where locknr = &lock;
update dgdtw_topografie set locknr = '' where locknr = &lock;
update dgdtw_topografie set verval=sysdate where id= &lock;
commit;

accept var prompt 'repeat process?  [Y/N] ? '
define doit = 'H:\Scripts\stop.sql'
column doit new_value doit noprint
set termout off
select 'H:\Scripts\unlock.sql' doit from dual where upper('&var') like 'Y%';
set termout on
start &doit. 

Som en forbedring foreslår jeg at flytte gentagelsesspørgsmålet til en separat SQL-fil og derefter kalde det ved hjælp af et argument, der fortæller det, hvilket script der skal genstartes (se https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716 )

For eksempel, fra 'unlock.sql' kald 'repeat.sql' sådan her:

start 'repeat.sql' unlock

med repeat.sql som noget som dette:

accept var prompt 'repeat &1 process?  [Y/N] ? '
define doit = 'H:\Scripts\stop.sql'
column doit new_value doit noprint
set termout off
select 'H:\Scripts\&1.sql' doit from dual where upper('&var') like 'Y%';
set termout on
start &doit. 



  1. Oracle:Jeg skal vælge n rækker fra hver k række i en tabel

  2. Kortlægning af PostgreSQL seriel type med Hibernate-annoteringer

  3. Konverter String ISO-8601 dato til oracles tidsstempel datatype

  4. Forbindelsesstrengparametre for gemte specifikationer