2

我需要验证一个特定的 pl/sql 对象(比如一个过程)在开发、测试和生产环境之间是否匹配。为了比较和 100% 确定代码匹配,我编写了一个简单的函数,如下所示:

function get_plsql_hash (p_owner varchar2, p_name varchar2, p_type varchar2) return number as
    v_hash number;
begin

select sum(ora_hash(line||'!'||text)) into v_hash
from dba_source
where owner = p_owner
  and name = p_name
  and type = p_type;

if v_hash is null then
    return 0;
else
    return v_hash;
end if;

exception
when others then
    return 0;
end get_plsql_hash;

它工作得很好。如果我只更改一个字符的代码,我将得到一个不同的哈希值(校验和或任何你想要调用的值)。我不仅可以使用 Oracle 字典视图来验证 pl/sql 代码,还可以验证引用/查找表、表结构、表权限、索引、约束、序列等中的数据。我上面粘贴的函数只是一个示例。

这是我的问题.... Oracle 数据字典中是否已经存在我不知道的东西可以给我一个代表每个对象的唯一值?如果 dba_objects 有一个名为 OBJ_CKSUM 或类似名称的列,那就太好了。如果 Oracle 可以在每次修改对象时将其保留在内部,它将完全消除对我编写的代码的需要(这只有几百行,但零行且无需维护代码要好得多)。如果不存在这样的特性,Oracle 是否会考虑在未来的版本中添加这个特性?我认为这很有帮助,但我不确定其他开发人员、测试人员或发布管理人员是否会同意。我不知道如何继续向 Oracle 请求功能。

4

0 回答 0