60 lines
1.3 KiB
SQL
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;
|
|
/ |