Exemplet nedan kommer omedelbart att starta om unlock.sql när det inte finns några lås för det projektet, genom att omdefiniera anropet till unlock.sql som ett anrop till empty.sql när minst en rad returneras.
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 förbättring föreslår jag att du flyttar den upprepade frågan till en separat SQL-fil och sedan anropar den med ett argument som talar om vilket skript som ska startas om (se https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716 )
Till exempel, från 'unlock.sql' anropa 'repeat.sql' så här:
start 'repeat.sql' unlock
med repeat.sql som något så här:
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.