次のコードを実行すると、PL/SQLコードが出力ファイル 'user.sql'にスプールされます。出力ファイルからPL/SQLコードを削除する方法はありますか? 'alter user ...'文だけが出力ファイルに残る必要があります。OracleスプールからのPL/SQLコードの削除
set serveroutput on
SET TERMOUT OFF
SET ECHO OFF
SET FEEDBACK OFF
SET LINESIZE 140
SET PAGESIZE 0
EXEC dbms_output.enable(NULL);
SPOOL user.sql
DECLARE
vVersion VARCHAR2 (100);
BEGIN
/* Check Version */
SELECT version
INTO vVersion
FROM PRODUCT_COMPONENT_VERSION where product like '%Oracle Database 12c%';
--
/* loop through users */
FOR i IN (SELECT *
FROM DBA_USERS_WITH_DEFPWD)
LOOP
/* print a statement, based on vVersion, for the current user */
IF (vVersion = '12.1.0.2.0')
THEN
DBMS_OUTPUT.put_line (
'Alter user '
|| i.username
|| ' identified by values '
|| '''462368EA9F7AD215'''
|| ';');
ELSE
DBMS_OUTPUT.put_line (
'Alter user '
|| i.username
|| ' identified by values '
|| '''Invalid Password'''
|| ';');
END IF;
END LOOP;
END;
/
SPOOL OFF
set serveroutput off
@user.sql
出力例:
SQL> 2 vVersion VARCHAR2(100)を宣言。 3 BEGIN 4/* チェック・バージョン/5 SELECTバージョン6 INTO vVersion 7
FROM PRODUCT_COMPONENT_VERSIONここで '%Oracle Database 12c%'のような製品はありません。 8 9 - ユーザスルー10/ループ*/11 I IN(* DBA_USERS_WITH_DEFPWD 12から選択)13
ループ14/* 現在のユーザのために、vVersionに基づいて文を印刷する*/15(vVersion IF FOR = '12 .1.0.2.0 ')16
THEN 17値' 21 || '' '462368EA9F7AD215' ''によって、 が識別されました
|| ';'); 23 ELSE 24 DBMS_OUTPUT.put_line(25
'ユーザーを変更する26 || i.username 27 ||' 012 || '' '無効なパスワード' ''によって識別される || ';'); 30 END IF; 31 END LOOP; 32 END; 33/Alter ユーザー '462368EA9F7AD215'によって識別されたGSMUSER。
値 '462368EA9F7AD215'によって識別されるユーザーMDSYSを変更します。
値「462368EA9F7AD215」で識別されるユーザーOLAPSYSを変更します。
値 '462368EA9F7AD215'によって識別されるユーザーLBACSYSを変更します。
値 '462368EA9F7AD215'で識別されるユーザーORDDATAを変更します。
値 '462368EA9F7AD215'によって識別されるユーザーORDSYSを変更します。
値 '462368EA9F7AD215'によって識別されるユーザーDVFを変更します。
値 '462368EA9F7AD215'で識別されるユーザーSYSDGを変更します。 ....
スクリプトでそのコードを配置し、 'SQLプロンプトから' @でスクリプトを実行することはできますか? –