sql >> Databasteknik >  >> RDS >> Oracle

oracle plsql om inte hittas upprepa

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. 



  1. mysqldump hela strukturen men bara data från valda tabeller i ett enda kommando

  2. Hur man får information om tidigare rekord

  3. Hur man lägger till AM/PM till ett tidsvärde i SQL Server (T-SQL)

  4. PHP utgångsdatum