sql >> データベース >  >> RDS >> Oracle

見つからない場合はoracleplsqlを繰り返します

    以下の例では、少なくとも1つの行が返されるたびに、unlock.sqlの呼び出しをempty.sqlの呼び出しとして再定義することにより、そのプロジェクトにロックがない場合、unlock.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. mysql-文字列を連結し、文字列を日付に変換する方法は?

    2. ORDERBYなしのSQLServer2005 ROW_NUMBER()

    3. 行androidを更新するSqliteデータベース

    4. Postgresqlは、特定の合計金額に達するまで選択します