【发布时间】:2019-05-29 02:31:58
【问题描述】:
我想在包含原始数据的包和程序中使用已编辑的列,但它只显示已编辑的列,然后如何在程序中使用实际数据? 在下面的示例中,ename 是已编辑的列,并且完全被编辑为空。
BEGIN DBMS_REDACT.add_policy(
object_schema => 'hr',
object_name => 'new_emp',
column_name => 'ename',
policy_name => 'redact_ename_info',
function_type => DBMS_REDACT.full,
expression => '1=1' );END;/ --Redaction is done for ename column in new_emp table.
create or replace procedure new_emp_pro(cust_id in varchar2) as
v_ename varchar2(200):=null;
begin
select ename into v_ename from new_emp where empid=cust_id;
dbms_output.put_line('v_ename :'||v_ename);
end;
/
PL/SQL procedure successfully completed.
v_ename :
【问题讨论】:
-
对不起,我不明白这个问题。您能否创建一个测试用例来显示您所拥有的以及您得到的结果?现在看起来,好像 ENAME 对于您传递给该过程的 CUST_ID 为空 (NULL)。如果 CUST_ID 不存在,您将收到 NO_DATA_FOUND 异常。所以……我真的不明白你在说什么。
-
这将有助于解释您的 VPD (?) 设置,以及哪个用户拥有表、创建过程和执行过程 - 以及适用于每个的规则(如果它们不同) .
-
@Littlefoot :例如,考虑表名 card_info 与列 card_no(4563158794655478) 部分编辑 (4563XXXXXXXX5478) 并且在从数据库中获取 card_no 时,我得到的是编辑后的 card_no,而不是原始 card_no。我的问题是我将如何使用(或获取)原始数据到包或程序中。
-
啊哈。感谢您发布的解释和代码。现在我明白你在说什么了。不幸的是,我什至从未听说过 DBMS_REDACT 包(什么是无知的,嗯?),我认为您创建了自己的程序来执行此操作。对不起,我帮不了你。我希望其他人能够提供帮助。祝你好运!
标签: oracle oracle12c redaction