是否可以在Proc中查询sql查询的结果,例如我希望将Roles上的Grant授权给某些表格。
SELECT DISTINCT 'GRANT SELECT ON '|| TABLE_NAME ||' TO BI_PUBLISHED_ACCESS;'
FROM BI.dd_tables
WHERE PUBLISHED = 'Y';
Output:-
GRANT SELECT ON TABLE1 TO BI_PUBLISHED_ACCESS;
GRANT SELECT ON TABLE2 TO BI_PUBLISHED_ACCESS;
GRANT SELECT ON TABLE3 TO BI_PUBLISHED_ACCESS;
AND SO ON
然后我复制&将输出粘贴回工作表&运行完整脚本,将我所有已发布表上的select赋予BI_PUBLISHED_ACCESS Roll。
我的过程有效,但这是一个非常手动的操作。我的问题是我可以使用一个查询的输出来运行另一个查询吗?
答案 0 :(得分:2)
您可以使用EXECUTE IMMEDIATE
声明。
因此,解决方案将如下所示:
BEGIN
for grant_statement in
(SELECT DISTINCT 'GRANT SELECT ON '|| TABLE_NAME ||' TO BI_PUBLISHED_ACCESS;'
FROM BI.dd_tables
WHERE PUBLISHED = 'Y')
LOOP
EXECUTE IMMEDIATE grant_statement;
END LOOP;
END;