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
请帮帮我。提前谢谢。
答案 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;