Oracle 数据库链接到 grant/revoke 个角色

Oracle database links to grant/revoke roles

我有一个关于如何在 Oracle PL/SQL 中使用数据库 links 的问题。假设我在当前数据库中创建了一个数据库 link (Database2),我正在使用它来访问第二个数据库。例如:

select *from CustomerTable@Database2;

Update CustomerTable@Database2
set Comment = 'Hello world!'
where CustomerID = 123;

这些都成功了。

但假设我想向 Database2 中的用户授予角色或撤消角色。可以通过我的数据库 link 完成吗?如果是这样,语法是什么?

如果我在 Database2 中打开一个 PL/SQL 会话,那么语法将是:

REVOKE some_role FROM bsmith;

GRANT some_other_role TO rjones;

有什么方法可以使用我的数据库 link 从我的原始数据库执行此操作?

您可以通过调用远程数据库上的 DBMS_SQL 包在数据库 Link 上执行 DDL:

declare
 v_cursor   NUMBER;
 v_ind        number;
 v_ret      varchar2(2000);
BEGIN
  v_cursor := dbms_sql.open_cursor@DB;
  dbms_sql.parse@DB(v_cursor, 'create sequence xyz_seq', dbms_sql.native);
  v_ind := dbms_sql.EXECUTE@DB( v_cursor );
end;
/