gpt4 book ai didi

oracle - 如何执行 DBMS_METADATA.GET_DEPENDENT_DLL 的即时输出?

转载 作者:行者123 更新时间:2023-12-01 12:37:43 25 4
gpt4 key购买 nike

我想通过 GET_DEPENDENT_DLL 获得一个对象的所有授权,删除该对象,然后能够使用 EXECUTE IMMEDIATE 再次授予它之前的所有权限。

为了获得 MYOBJECT 的 GRANTS,我做了一些事情:

DECLARE
get_grants VARCHAR2(300) := 'SELECT DBMS_METADATA.GET_DEPENDENT_DDL (''OBJECT_GRANT'', :object_name, :owner) from dual';
grants_obtained VARCHAR(30000);
BEGIN
EXECUTE IMMEDIATE get_grants INTO grants_obtained USING 'MYOBJECT', 'MYSCHEMA';
END;

这会返回类似于:

GRANT QUERY REWRITE ON "MYSCHEMA"."MYOBJECT" TO "SCHEMA1" WITH GRANT OPTION

GRANT EXECUTE ON "MYSCHEMA"."MYOBJECT" TO "SCHEMA2" WITH GRANT OPTION

GRANT FLASHBACK ON "MYSCHEMA"."MYOBJECT" TO "SCHEMA3" WITH GRANT OPTION

结果的格式不是 EXECUTE IMMEDIATE 可以处理的方式。如果我尝试使用 EXECUTE IMMEDIATE 运行它们,它会失败:

EXECUTE IMMEDIATE grants_obtained;

抛出:

ORA-00933: SQL command not properly ended

有没有办法使用 GET_DEPENDENT_DLL 获取 OBJECT 的 GRANTS 并能够使用 EXECUTE IMMEDIATE 运行它们?

最佳答案

改变:

EXECUTE IMMEDIATE grants_obtained;

收件人:

EXECUTE IMMEDIATE 'create schema authorization MYSCHEMA '||grants_obtained;

CREATE SCHEMA可以运行多个授权声明,授权之间没有终止符。

关于oracle - 如何执行 DBMS_METADATA.GET_DEPENDENT_DLL 的即时输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com