如何在 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
我不会更改所有用户的默认表空间,只是 scott
和 mike
。您将省略第 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 会为您一次完成所有事情,之后您无需执行任何操作。
我想为除 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
我不会更改所有用户的默认表空间,只是 scott
和 mike
。您将省略第 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 会为您一次完成所有事情,之后您无需执行任何操作。