【发布时间】:2016-07-28 01:37:03
【问题描述】:
执行以下代码将假脱机输出文件“user.sql”中的 PL/SQL 代码。有没有办法从输出文件中删除 PL/SQL 代码?只有“alter user ...”语句必须保留在输出文件中。
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> DECLARE 2 vVersion VARCHAR2 (100); 3 开始 4 /* 检查版本 /5 选择版本 6 INTO vVersion 7
FROM PRODUCT_COMPONENT_VERSION where product like '%Oracle Database 12c%'; 8 9 -- 10 / 循环遍历用户 */ 11 FOR i IN (SELECT * 12 FROM DBA_USERS_WITH_DEFPWD) 13
LOOP 14 /* 打印一个基于 vVersion 的语句,用于 当前用户 */ 15 IF (vVersion = '12.1.0.2.0') 16
然后 17 DBMS_OUTPUT.put_line ( 18 '改变 用户 ' 19 || i.username 20 || ' 确定 按值 ' 21 || '''462368EA9F7AD215''' 22
|| ';'); 23 ELSE 24 DBMS_OUTPUT.put_line ( 25
'改变用户' 26 || i.用户名 27 || ' 由值 '28 || 标识'''密码无效''' 29 || ';'); 30 结束如果; 31 结束循环; 32 结束; 33 / 改变 用户 GSMUSER 由值“462368EA9F7AD215”标识;
更改由值“462368EA9F7AD215”标识的用户 MDSYS;
更改由值“462368EA9F7AD215”标识的用户 OLAPSYS;
更改由值“462368EA9F7AD215”标识的用户 LBACSYS;
更改由值“462368EA9F7AD215”标识的用户 ORDDATA;
更改由值“462368EA9F7AD215”标识的用户 ORDSYS;
更改由值“462368EA9F7AD215”标识的用户 DVF;
更改由值“462368EA9F7AD215”标识的用户 SYSDG; ....
【问题讨论】:
-
你能把这段代码放在一个脚本中,然后在 SQL 提示符下用
@运行脚本吗?