Files
26ai_mvp_poc/fnc_26ai_censo_vpd.sql
2026-05-08 13:15:51 +00:00

60 lines
1.3 KiB
SQL

create or replace FUNCTION fnc_26ai_censo_vpd (
schema_name IN VARCHAR2,
object_name IN VARCHAR2
) RETURN VARCHAR2
AS
/*
Criado por: fernando.leal@oracle.com
Data: Oct/2025
Objetivo: demonstrar casos de uso do Oracle AI Database 26ai
v1 - funcao de VPD para demonstracao de dados Censo - leal
Pre req:
-- como ADMIN
grant CREATE ANY CONTEXT to aichat1
-- como AICHAT1
CREATE CONTEXT CTX_26AI_RLS USING pkg_26AI_CENSO_RLS;
CREATE OR REPLACE PACKAGE pkg_26AI_CENSO_RLS AS
PROCEDURE set_user(p_user IN VARCHAR2);
END;
CREATE OR REPLACE PACKAGE BODY pkg_26AI_CENSO_RLS AS
PROCEDURE set_user(p_user IN VARCHAR2) IS
BEGIN
DBMS_SESSION.SET_CONTEXT(
namespace => 'CTX_26AI_RLS',
attribute => 'SESSION_USER',
value => p_user
);
END;
END ;
-- teste
BEGIN
pkg_26AI_CENSO_RLS.set_user('ADMIN');
END;
SELECT SYS_CONTEXT('CTX_26AI_RLS','SESSION_USER') ;
*/
l_predicate VARCHAR2(4000);
BEGIN
pkg_26AI_CENSO_RLS.set_user( trim(lower(V('APP_USER'))) );
-- Build a predicate that filters by allowed operation codes for current user
l_predicate := ' UF IN (SELECT UF FROM TB_26AI_CENSO_VPD WHERE trim(lower(username)) = ''' || SYS_CONTEXT('CTX_26AI_RLS','SESSION_USER') || ''')';
--insert into tb_test values( l_predicate );
RETURN l_predicate;
END;
/