oracle plsql 如果没有找到重复
oracle plsql if not found repeat
set verify off
accept project prompt ' project : '
select locknr,description,couserid,ciuserid from dgdtw_lockedinfo where
description = '&project' and ciuserid is null;
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.
我需要一个循环脚本,这样如果项目为空或错误,脚本会要求重复或停止。
类似于:
accept var prompt 'project number is wrong try again? [Y/N] ? '
直到项目编号正确或答案为 "N"
下面的示例将在该项目没有锁定时立即重新启动 unlock.sql,方法是将对 unlock.sql 的调用重新定义为对 empty.sql 的调用,只要至少有一行被锁定返回。
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.
作为一项改进,我建议将重复问题移动到一个单独的 SQL 文件中,然后使用一个参数调用它,告诉它要重新启动哪个脚本(参见 https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716)
例如,从 'unlock.sql' 像这样调用 'repeat.sql':
start 'repeat.sql' unlock
和 repeat.sql 是这样的:
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.
set verify off
accept project prompt ' project : '
select locknr,description,couserid,ciuserid from dgdtw_lockedinfo where
description = '&project' and ciuserid is null;
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.
我需要一个循环脚本,这样如果项目为空或错误,脚本会要求重复或停止。 类似于:
accept var prompt 'project number is wrong try again? [Y/N] ? '
直到项目编号正确或答案为 "N"
下面的示例将在该项目没有锁定时立即重新启动 unlock.sql,方法是将对 unlock.sql 的调用重新定义为对 empty.sql 的调用,只要至少有一行被锁定返回。
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.
作为一项改进,我建议将重复问题移动到一个单独的 SQL 文件中,然后使用一个参数调用它,告诉它要重新启动哪个脚本(参见 https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716)
例如,从 'unlock.sql' 像这样调用 'repeat.sql':
start 'repeat.sql' unlock
和 repeat.sql 是这样的:
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.