【发布时间】:2016-03-31 09:23:11
【问题描述】:
以下查询在 THAN 语句处运行时出错。是否可以在 THAN 语句中使用选择?关于如何使其工作的任何想法?
SET SERVEROUTPUT ON
SET TERMOUT OFF
SET ECHO OFF
SET FEEDBACK OFF
SET LINESIZE 140
SET PAGESIZE 0
exec dbms_output.enable(NULL);
SPOOL C:\test\user.sql
BEGIN
SELECT DISTINCT version,
CASE
WHEN version = '12.1.0.2.0'
THEN
dbms_output.put_line(''select' || 'Alter user ' || username || ' identified by values ' || '''EE3FD1E715941451''' || ';''); from DBA_USERS_WITH_DEFPWD;
ELSE
dbms_output.put_line(''select' || 'Alter user ' || username || ' identified by values ' || '''Invalid Password''' || ';''); from DBA_USERS_WITH_DEFPWD;
FROM PRODUCT_COMPONENT_VERSION;
END;
SPOOL OFF
编辑:
正在运行的代码如下所示:
spool c:/test/user.sql
select 'Alter user ' || username || ' identified by values ' || '''Invalid Password''' || ';'
from DBA_USERS_WITH_DEFPWD;
spool off
假脱机输出示例:
Alter user GSMUSER identified by values 'Invalid Password';
Alter user MDSYS identified by values 'Invalid Password';
Alter user OLAPSYS identified by values 'Invalid Password';
Alter user LBACSYS identified by values 'Invalid Password';
该脚本不适用于新的 Oracle 数据库版本。自 Oracle 12.1.0.2.0 起,无法将密码设置为无效密码。我需要为这个问题建立版本识别。所有版本低于 12.1.0.2.0 的 Oracle 数据库都应使用旧脚本处理,密码应设置为“无效密码”。现在所有较新的版本都应该获得某种标准密码。
【问题讨论】:
-
您不能在 SELECT 语句中使用 DBMS_OUTPUT。您正在混合 SQL 和 PL/SQL。它们是不同的引擎。此外,您的 SELECT 语句实际上没有任何意义。用恰当的语言解释您的要求。
-
您能否发布一些示例数据和想要的结果?
-
@LalitKumarB 他正在尝试这样做:stackoverflow.com/questions/36302810/…
-
你遇到了什么错误?
-
@Sathya 我明白了……他删除了那个问题。