使用for循环授予读访问权限

时间:2014-04-26 16:36:47

标签: sql oracle plsql

QUERY

BEGIN

FOR R IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'ONAME')

LOOP

    GRANT SELECT ON R.TABLE_NAME TO UNAME;

END LOOP;

END; /

我想将ONAME中的表的读取权限授予UNAME。但是,我有以下错误:

PLS-00103:遇到以下其中一项时遇到符号“GRANT”: (如果是loop mod null pragma,则开始为goto声明退出 使用时提高返回选择更新   << 继续关闭当前删除获取锁定插入打开回滚 savepoint set sql execute commit forall merge pipe purge

请帮帮我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在Oracle中,您不能直接在PL / SQL中执行任何DDL语句。您必须使用EXECUTE IMMEDIATE来执行它们,例如:

FOR R IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'ONAME')
LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON '||R.TABLE_NAME||' TO UNAME';
END LOOP;