使用sql查询的结果在第二个SQL查询中运行

时间:2018-04-24 08:30:51

标签: sql oracle

是否可以在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。

我的过程有效,但这是一个非常手动的操作。我的问题是我可以使用一个查询的输出来运行另一个查询吗?

1 个答案:

答案 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;