Oracle
 sql >> база данни >  >> RDS >> Oracle

oracle plsql, ако не бъде намерен, повторете

Примерът по-долу незабавно ще рестартира 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. 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между временна таблица и глобална временна таблица в Oracle?

  2. Грешка в Oracle 11.1, преобразуваща номера на юлианския ден в ДАТА или TIMESTAMP

  3. Обектът на Oracle в рамката на VS entity не актуализира първичния ключ в кода

  4. Колко широко използвани са обектите на Oracle?

  5. Едновременна обработка на актуализации в хибернация