考虑一个具有大量过期用户帐户的 Oracle 11gR2 数据库。我想在不更改任何密码的情况下重新启用所有用户帐户。
这是一个 SQL 语句,用于创建ALTER USER
可以执行以重新启用帐户的 SQL 语句字符串:
select listagg( cmds, ' ' ) within group ( order by rownum )
as cmd
from (
select
'alter user "' || d.username || '"' ||
' identified by values ''' || u.password || '''' ||
' account unlock;'
as
cmds
from
dba_users d, sys.user$ u
where
d.user_id = u.user#
);
此查询的结果是一个字符串,其中包含如下所示的条目:
alter user "USERNAME" identified by values '1234567890ABCDEF' account unlock; ...
我确信可以创建一个 PL/SQL 过程来将此查询的结果存储到一个变量中,然后调用EXECUTE IMMEDIATE [var]
,但是是否可以通过一些 SQL 语法魔术来EXECUTE IMMEDATE
简单地执行由SELECT
语句创建的字符串?