L'exemple ci-dessous redémarrera immédiatement unlock.sql lorsqu'il n'y a pas de verrous pour ce projet, en redéfinissant l'appel à unlock.sql comme un appel à empty.sql chaque fois qu'au moins une ligne est renvoyée.
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.
Comme amélioration, je suggère de déplacer la question de répétition dans un fichier SQL séparé, puis de l'appeler en utilisant un argument qui lui indique quel script redémarrer (voir https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716 )
Par exemple, à partir de 'unlock.sql', appelez 'repeat.sql' comme ceci :
start 'repeat.sql' unlock
avec repeat.sql comme quelque chose comme ça :
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.