在 Oracle SQL 脚本中运行
grant
命令,有什么方法可以判断它是否真的改变了什么。相当于 SQL%ROWCOUNT
或类似的东西?
我正在编写一个 ansible 模块来管理授权(在内部使用 SQLPlus 来运行命令)。如果它改变了任何东西或者它是否已经正常,那么能够准确地报告会很好。我想我可以先做一堆选择,但然后我必须将每个授权(涉及不同类型的授权,包括从 sys 到模式所有者的授权)映射到一个选择。
我想做的是像
declare
vNum number := 0;
procedure do_grant(vGrant in varchar2) is
begin
execute immediate 'grant ' || vGrant || ' to myrole';
if SQL%CHANGED > 0 then
vNum := vNum + 1;
end if;
end do_grant;
begin
do_grant('select on foo');
do_grant('select on bar');
do_grant('execute on baz');
dbms_output(vNum);
end;
/
(这是简化的伪代码,没有错误处理等,为了简单起见,但我捕获了输出并基于此将状态更新为 ansible。)