0
가상 개인 데이터베이스 정책의 번호를 가지고예상 UDT는 내가 문제 다음 한
FUNCTION app_user_is_master_owner(
schema_in IN VARCHAR2,
object_in IN VARCHAR
)
RETURN VARCHAR2
IS return_value VARCHAR2(100);
BEGIN
SELECT 'OWNER_FK = ' ||
(SELECT mo.owner_id
FROM MASTER_OWNER mo
WHERE upper(mo.owner_name) = SYS_CONTEXT('USERENV', 'SESSION_USER')) ||
' OR OWNER_FK IS EMPTY'
INTO return_value
FROM DUAL;
RETURN return_value;
END app_user_is_master_owner;
내가 ADD_POLICY 전화를 DBMS_RLS에서 다른 policys
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'MY_SCHEMA',
object_name => 'MASTER_DATA',
policy_name => 'app_user_is_mo_policy',
function_schema => 'MY_SCHEMA',
policy_function => 'MY_RLS_POLICYS.app_user_is_master_owner',
statement_types => 'SELECT, INSERT, UPDATE, DELETE'
);
END;
내가 SQL 내에서 플러스 절은 반환 ''RLS 정책 기대로 추가하지 않고 함수를 호출
에 추가하기SQL> select my_rls_policys.app_user_is_master_owner('A','A') from dual;
MY_RLS_POLICYS.APP_USER_IS_MASTER_OWNER('A','A')
--------------------------------------------------------------------------------
OWNER_FK = 4000 OR OWNER_FK IS EMPTY
하지만 VPD 정책으로 호출하면이 오류 메시지가 표시됩니다.
SQL> SELECT * FROM MASTER_DATA;
SELECT * FROM MASTER_DATA
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected UDT got NUMBER
나는 결과가 선택이 아닌 VARCHAR이지만,에 TO_CHAR를 추가하는 것은 어느 쪽도 "TO_CHAR (RETURN_VALUE를) 반환" "TO_CHAR 선택 (...) RETURN_VALUE에"나를 해결하는 것 없기 때문에 것 같아요 문제.
다른 policys는 잘 동작합니다.
도움 주셔서 감사합니다. 마티아스
그러면 해결됩니다. 고마워요! – mSchnell
두 가지 더 많은 것들이 있는데, predicate (일반적으로 synamic string ~ varchar2 (4001)의 한계를 사용)와 같이 생성 된 문자열에 대해 더 큰 크기를 정의하고 'NO_DATA_FOUND'에 대한 대소 문자를 추가하십시오. – haki
지금 생각해 보겠습니다. 지금 시도하고있는 튜토리얼의 예입니다. 그러나 충고에 감사드립니다. – mSchnell