sql >> Database >  >> RDS >> Oracle

oracle plsql indien niet gevonden herhaal

In het onderstaande voorbeeld wordt unlock.sql onmiddellijk opnieuw gestart wanneer er geen vergrendelingen zijn voor dat project, door de aanroep naar unlock.sql te herdefiniëren als een aanroep naar empty.sql wanneer ten minste één rij wordt geretourneerd.

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. 

Als verbetering stel ik voor om de herhaalvraag naar een apart SQL-bestand te verplaatsen en dat vervolgens aan te roepen met een argument dat aangeeft welk script opnieuw moet worden gestart (zie https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716 )

Roep bijvoorbeeld vanuit 'unlock.sql' 'repeat.sql' als volgt aan:

start 'repeat.sql' unlock

met repeat.sql als iets als dit:

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. sql - enkele query om waarden te retourneren die niet aanwezig zijn

  2. innodb_lock_wait_timeout time-out verhogen

  3. Arraywaarden opschonen voordat mysql wordt ingevoegd

  4. MySQL:Hoe selecteer ik de UTC-offset en DST voor alle tijdzones?