要求如下:
通过 Oracle Apex 应用程序,我需要删除另一个 Oracle 数据库中的用户/架构。即,使用 Oracle Apex 应用程序远程删除用户。
目前,我正在使用以下过程来完成此任务。但是,由于有很多远程数据库,所以,我想知道是否有一种方法可以使其动态化,即动态地将数据库链接名称传递给DBMS_UTILITY.EXEC_DDL_STATMENT
。因此,用户将传递用户名和数据库名称,并根据数据库名称,过程将连接到正确的数据库/数据库链接并删除给定的用户。如果有其他方法可以完成此任务,请告诉我。
CREATE OR REPLACE
PROCEDURE drop_user_proc(
p_username VARCHAR2,
p_databasename VARCHAR2)
IS
ddl_stmt VARCHAR2(100);
BEGIN
IF p_databasename = ‘REMOTEDB1’ THEN
ddl_stmt := 'DROP USER '||p_username||' CASCADE';
dbms_utility.exec_ddl_statement@remotedb1(ddl_stmt);
END IF;
END drop_user_proc;
最佳答案
你可以试试这个:
CREATE OR REPLACE
PROCEDURE drop_user_proc(
p_username VARCHAR2,
p_databasename VARCHAR2)
IS
ddl_stmt VARCHAR2(100);
BEGIN
ddl_stmt := 'DROP USER '||p_username||' CASCADE';
execute immediate 'begin dbms_utility.exec_ddl_statement@' || p_databasename || '(:ddl_stmt); end;' using ddl_stmt;
END drop_user_proc;
关于oracle - 动态执行 dbms_utility.exec_ddl_statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614955/