sql >> Databáze >  >> RDS >> Oracle

oracle plsql, pokud nebyl nalezen, opakujte

Níže uvedený příklad okamžitě restartuje unlock.sql, když pro daný projekt nejsou žádné zámky, a to předefinováním volání unlock.sql jako volání empty.sql vždy, když je vrácen alespoň jeden řádek.

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. 

Jako vylepšení navrhuji přesunout opakovanou otázku do samostatného souboru SQL a poté ji zavolat pomocí argumentu, který jí řekne, který skript se má restartovat (viz https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1013716

Například z 'unlock.sql' volejte 'repeat.sql' takto:

start 'repeat.sql' unlock

s repeat.sql jako něco takového:

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. Postgresql:Vypočítejte pořadí podle počtu pravdivých klauzulí NEBO

  2. Jak vytvořit dotaz MySQL pro vyhledání souvisejících příspěvků z více tabulek?

  3. Technika Pure-SQL pro automatické číslování řádků v sadě výsledků

  4. chybí položka FROM-klauzule pro tabulku