Ví dụ dưới đây sẽ ngay lập tức khởi động lại unlock.sql khi không có khóa nào cho dự án đó, bằng cách xác định lại lệnh gọi unlock.sql dưới dạng lệnh gọi đến void.sql bất cứ khi nào trả về ít nhất một hàng.
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.
Để cải thiện, tôi khuyên bạn nên chuyển câu hỏi lặp lại vào một tệp SQL riêng biệt, sau đó gọi câu hỏi đó bằng cách sử dụng một đối số cho biết tập lệnh nào sẽ khởi động lại (xem https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716 )
Ví dụ:từ 'unlock.sql' hãy gọi 'repeat.sql' như thế này:
Mở khóastart 'repeat.sql' unlock
với repeat.sql như sau:
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.