Это продолжение старого вопроса о функции безопасности Oracle на уровне строк, которая обсуждалась ранее здесь
Мне нужно было изменить, потому что исходный код вернул бы более одного результата, если пользователь был присоединен к нескольким проектам. Так что теперь мне нужно иметь несколько, где условия (то есть, где project = project_1 или project = project_2) переданы в политику безопасности, чтобы это работало. Для этого я попытался изменить код с помощью цикла for, и он не работает ...
--create function
create or replace function
table_access_policy
(obj_schema varchar2, obj_name varchar2) return varchar2
is
v_project_temp varchar2(9000);
begin
v_project_temp:= 'declare v_project varchar2(9000);
begin
v_project:= ''project = '';
for c in (select admin.access_list.project from admin.access_list where upper(admin.access_list.user_id) = SYS_CONTEXT (''USERENV'', ''SESSION_USER''))
loop
v_project := v_project || c.project_sn || '' or project = '' ;
end loop;
v_project := rtrim(v_project, '' or project = '');
end;';
return v_project_temp;
end;
Функция сохраняет / запускает без каких-либо ошибок, но сама политика выдает ошибку при ее вызове. Есть ли лучший способ сделать это?