如何在包装中使用修订列(显示修订值)

时间:2019-05-29 02:31:58

标签: oracle oracle12c redaction

我想在包和过程中使用原始数据的已编辑列,但是只有在程序中如何使用实际数据时,它才会显示已编辑的列? 在下面的示例中,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 :

1 个答案:

答案 0 :(得分:0)

您想要做的是,您已经为所有用户编辑了列ename,因此当您尝试打印该列时,系统将不会显示该值,因为这是编辑的目的。内部ename值将可用于处理,但在所有处理之后将应用修订。如果您能够打印ename,则整个编辑目的都将失败,因为最终用户可以检索数据。

您可以检查ename是否为空

如果您需要更多详细信息,请告诉我。我最近在生产数据库中实现了修订。