私の会社で働いていた以前のdbaからpl/sqlスクリプトを継承しました。失敗した分散トランザクションを「クリーンアップ」するために使用されます。このスクリプトは、ドット「。」のみを含む1行を除いて、理解するのに十分簡単です。私はこれを見たことがありません...点線の目的/機能は何ですか?
set define on
set scan on
set verify off
set serveroutput on
undefine IncidentNumber
spool &&IncidentNumber
connect / as sysdba
whenever sqlerror continue
set serveroutput on size 1000000
set linesize 200
DECLARE
/* &&IncidentNumber */
pragma autonomous_transaction;
l_sql_statement VARCHAR2(255);
l_fdist_found BOOLEAN := FALSE;
--
CURSOR cfdist IS
SELECT local_tran_id tranid, upper(state) state
FROM dba_2pc_pending;
--
BEGIN
--
FOR rfdist IN cfdist LOOP
l_fdist_found := TRUE;
if rfdist.state = 'PREPARED' then
l_sql_statement := 'ROLLBACK FORCE '''||rfdist.tranid||''''||'/*&&IncidentNumber*/';
DBMS_OUTPUT.PUT_LINE(l_sql_statement);
EXECUTE IMMEDIATE l_sql_statement;
COMMIT;
end if;
DBMS_OUTPUT.PUT_LINE('Executing DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('||rfdist.tranid||')');
DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(rfdist.tranid)/*&&IncidentNumber*/;
COMMIT;
IF l_fdist_found = TRUE THEN
DBMS_OUTPUT.PUT_LINE('Rolled back distributed transaction id '|| rfdist.tranid);
END IF;
END LOOP;
--
IF l_fdist_found = FALSE THEN
DBMS_OUTPUT.PUT_LINE('No failed distributed transactions were found.');
END IF;
--
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Error:'||SQLCODE||':'||SQLERRM);
END;
.
/
ドット「。」のみの行は、入力を終了し、実行せずにバッファに保存するSQL * Plusコマンドのようです。
SQL>
SQL>
SQL> DECLARE
2 qty1 number;
3 BEGIN
4 select count(*) into qty1 from dba_roles;
5 dbms_output.put_line('Number of roles: '||to_char(qty1));
6 END;
7 .
SQL>
SQL>
SQL> LIST
1 DECLARE
2 qty1 number;
3 BEGIN
4 select count(*) into qty1 from dba_roles;
5 dbms_output.put_line('Number of roles: '||to_char(qty1));
6* END;
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> DECLARE
2 qty2 number;
3 BEGIN
4 select count(*) into qty2 from dba_procedures;
5 dbms_output.put_line('Number of procedures: '||to_char(qty2));
6 END;
7 .
SQL>
SQL>
SQL>
SQL> LIST
1 DECLARE
2 qty2 number;
3 BEGIN
4 select count(*) into qty2 from dba_procedures;
5 dbms_output.put_line('Number of procedures: '||to_char(qty2));
6* END;
SQL>
SQL>
SQL>
SQL> /
Number of procedures: 26744
PL/SQL procedure successfully completed.
SQL>
SQL>