如何在 ORACLE 中使用 ALTER USER 更改多个用户

How to alter more that one user using ALTER USER in ORACLE

我想为除 SYS 以外的所有用户更改 DEFAULT TABLESPACE

select username from DBA_USERS where username!='SYS'; 

获取我需要的所有用户。

但是我不知道如何正确地集成这个子查询来改变用户。

我试过了

ALTER USER (select username from DBA_USERS where username!='SYS') DEFAULT TABLESPACE DATA;

一个选择是编写一个 PL/SQL 脚本,它将遍历所有你想要的用户,并使用动态 SQL 改变每个用户。像这样:

我有什么?

SQL> show user
USER is "SYS"
SQL>
SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

我不会更改所有用户的默认表空间,只是 scottmike。您将省略第 6 行。

SQL> set serveroutput on
SQL> declare
  2    l_str varchar2(200);
  3  begin
  4    for cur_r in (select username from all_users
  5                  where username <> 'SYS'
  6                    and username in ('SCOTT', 'MIKE')
  7                 )
  8    loop
  9      l_Str := 'alter user ' || cur_r.username ||
 10               ' default tablespace users';
 11      dbms_output.put_line('User: ' || cur_r.username);
 12      dbms_output.put_line(l_str);
 13      execute immediate l_str;
 14    end loop;
 15  end;
 16  /
User: MIKE
alter user MIKE default tablespace users
User: SCOTT
alter user SCOTT default tablespace users

PL/SQL procedure successfully completed.

SQL>

另一个(可能更简单?)选项是让 SQL 为您创建一堆语句:

SQL> select 'alter user ' || username || ' default tablespace users;' stmt
  2  from all_users
  3  where username <> 'SYS'
  4    and username in ('SCOTT', 'MIKE');

STMT
-------------------------------------------------------------------
alter user MIKE default tablespace users;
alter user SCOTT default tablespace users;

SQL>

现在您将复制这些ALTER USER ...行并粘贴它们,然后-就是这样。或者,您可以 spool 那个 SELECT 的结果到一个文件中(例如 alter_file.sql),然后 运行 文件作为

SQL> @alter_file

所以是的,还有其他选择,但是这样的 PL/SQL 会为您一次完成所有事情,之后您无需执行任何操作。