Как изменить функцию, чтобы пользователь (HR1) мог просматривать строки, в которых CTL_UPD_USER - это VPD_CLERK1 или VPD_CLERK2?
Я очень плохо знаком с Oracle и pl / sql.
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
IF USER ='HR1' THEN
con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''';
else
con:= 'CTL_UPD_USER=USER';
end if;
RETURN (con);
END;
Я пробовал различные варианты использования OR и получил ошибку компиляции: оператор pl / sql игнорируется, выражение имеет неправильный тип:
Con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''' OR
'CTL_UPD_USER='||'''VPD_CLERK3''';
РАБОЧИЙ КОД:
CREATE TABLE CUSTOMERS (
SALES_REP_ID NUMBER(4),
CUSTOMER_ID NUMBER(8),
CTL_UPD_DTTM DATE,
CTL_UPD_USER VARCHAR2(30),
CTL_REC_STAT CHAR(1),
primary key (sales_rep_id, customer_id)
);
insert into customers values (1000, 90000,NULL, 'VPD_CLERK1','1');
insert into customers values (1000, 90001,NULL, 'VPD_CLERK1','2');
insert into customers values (1000, 90002,NULL, 'VPD_CLERK2','3');
insert into customers values (1000, 90003,NULL, 'VPD_CLERK2','4');
insert into customers values (1000, 90004,NULL, 'VPD_CLERK3','5');
CREATE OR REPLACE FUNCTION
DBSEC_ROW_OWNER_WHERE(
P_SCHEMA_NAME IN VARCHAR2,
P_OBJECT_NAME IN VARCHAR2)
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
IF USER ='HR1' THEN
con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''';
else
con:= 'CTL_UPD_USER=USER';
end if;
RETURN (con);
END;
exec dbms_rls.add_policy(object_schema =>'DBSEC',object_name =>
'CUSTOMERS',policy_name => 'dbsec_row_onwer_policy', function_schema =>
'SYS',
policy_function =>'DBSEC_ROW_OWNER_WHERE', enable => true);
Я хочу иметь возможность войти в систему как HR1 и просматривать строки, где CTL_UPD_USER - это либо VPD_CLERK1, либо VPD_CLERK2, либо пользователь - HR1.