oracle - 动态执行 dbms_utility.exec_ddl_statement

标签 oracle database

要求如下:

通过 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/

相关文章:

sql - 从 cols 中选择 column_name 尽管列存在但什么也不返回

java - 是一次性从数据库获取所有需要的数据更好,还是更频繁地发出请求更好?

python - 如何从相似记录中获取最后日期? | Django

oracle - 使用 Oracle Sql Developer 生成 DDL 以包含外键

oracle - Oracle中的触发器以及回滚后如何保留记录

database - 数据集和数据库有什么区别?

database - 使用 OpenOffice DB 与 Microsoft Access 的主要缺点是什么?

sql - 使用 SQL 选择行 n 次

java - DriverManager.getConnection 无法解析为类型

linux - 我需要在 oracle 数据库卡住时测试我的应用程序的行为。因此我需要模拟 oracle DB freeze