如何将功能状态更改为无效?

时间:2018-07-26 07:29:41

标签: oracle alter stored-functions

我有一个使用很多对象的功能。

我想通过不触摸功能代码和不触摸对象(对于某些测试)来使该功能状态无效。

是否可以通过命令使功能无效?

类似:

userId | valid | date
1      | null  | 2018-07-01
1      | 1     | 2018-07-02
1      | 1     | 2018-07-03
1      | 1     | 2018-07-04
1      | 1     | 2018-07-05
2      | null  | 2018-07-01
2      | 0     | 2018-07-02
2      | 0     | 2018-07-03
2      | 1     | 2018-07-04
2      | 1     | 2018-07-05
3      | null  | 2018-07-01
3      | null  | 2018-07-02
3      | 1     | 2018-07-03
3      | 1     | 2018-07-04
3      | 1     | 2018-07-05

我正在使用Oracle 11g。

1 个答案:

答案 0 :(得分:0)

您可以通过REVOKE获得一些特权来轻松使功能失效。

示例-该函数已授予对表HR.JOBS的选择

create function job_cnt return number as
 v_cnt NUMBER;
begin
 select count(*) into v_cnt from hr.jobs;
 return (v_cnt);
end;
/

并且是VALID

select OBJECT_NAME, STATUS from user_objects where object_name = 'JOB_CNT';

OBJECT_NAME  STATUS 
------------ -------
JOB_CNT      VALID  

通过REVOKE获得特权,该特权将立即失效。

revoke select on hr.jobs from your_user;

select OBJECT_NAME, STATUS from user_objects where object_name = 'JOB_CNT';

OBJECT_NAME  STATUS 
------------ -------
JOB_CNT      INVALID

请注意,这仅适用于其他所有者的访问,而其他所有者需要显式GRANTS进行访问。