112 lines
4.9 KiB
SQL
112 lines
4.9 KiB
SQL
|
|
set serveroutput on
|
|
set long 9999999
|
|
set pagesize 1000
|
|
set linesize 200
|
|
-- ============================================================================
|
|
-- Profile especializado para el lab de SELECT AI con annotations
|
|
-- ============================================================================
|
|
-- Este profile limita el contexto de SELECT AI a las tres tablas del ejercicio.
|
|
-- La opcion annotations=true envia las annotations de tablas y columnas al modelo.
|
|
-- enforce_object_list=true evita que el modelo use otras tablas accesibles.
|
|
|
|
BEGIN
|
|
DBMS_CLOUD_AI.DROP_PROFILE(
|
|
profile_name => 'PROFILE_GPT_5_5_SELECTAI',
|
|
force => TRUE
|
|
);
|
|
END;
|
|
/
|
|
|
|
BEGIN
|
|
DBMS_CLOUD_AI.CREATE_PROFILE(
|
|
profile_name => 'PROFILE_GPT_5_5_SELECTAI',
|
|
attributes => JSON_OBJECT(
|
|
'provider' VALUE 'oci',
|
|
'credential_name' VALUE 'OCI$RESOURCE_PRINCIPAL',
|
|
'model' VALUE 'openai.gpt-5.5',
|
|
'region' VALUE 'us-chicago-1',
|
|
'oci_compartment_id' VALUE 'ocid1.compartment.oc1..aaaaaaaa33ogmhasyvcqzuvkrfzo5mavh3q2le7mgwmy74yzpyqi7byxgrlq',
|
|
'temperature' VALUE 1,
|
|
'max_tokens' VALUE 8192,
|
|
'annotations' VALUE 'true',
|
|
'object_list_mode' VALUE 'all',
|
|
'enforce_object_list' VALUE 'true',
|
|
'object_list' VALUE JSON_ARRAY(
|
|
JSON_OBJECT('owner' VALUE USER, 'name' VALUE 'T_ROOT'),
|
|
JSON_OBJECT('owner' VALUE USER, 'name' VALUE 'T_COMERCIOS'),
|
|
JSON_OBJECT('owner' VALUE USER, 'name' VALUE 'T_BENEFICIOS_POR_NIVEL')
|
|
)
|
|
),
|
|
description => 'Profile para SELECT AI usando annotations y solamente T_ROOT, T_COMERCIOS y T_BENEFICIOS_POR_NIVEL.'
|
|
);
|
|
END;
|
|
/
|
|
|
|
-- ============================================================================
|
|
-- Lab: Consultas SELECT AI usando annotations
|
|
-- ============================================================================
|
|
-- Este script contiene ejemplos didacticos de SELECT AI.
|
|
--
|
|
-- La accion SHOWSQL muestra el SQL que el modelo genera. Esto ayuda a ver como
|
|
-- las annotations de display_name, business_description, synonyms y
|
|
-- relationship_hint guian la seleccion de tablas, columnas y joins.
|
|
|
|
|
|
-- SELECT AI modes:
|
|
-- showsql: cuando quieres obtener el SQL generado, revisarlo, auditarlo, registrarlo en logs o ejecutarlo después con control propio.
|
|
-- runsql: cuando aceptas que la base de datos genere y ejecute la consulta directamente.
|
|
-- narrate: cuando quieres una respuesta en lenguaje natural basada en el resultado.
|
|
-- explainsql: cuando quieres explicar el SQL generado.
|
|
-- chat: conversación general con el modelo, no necesariamente sobre SQL.
|
|
|
|
-- ============================================================================
|
|
|
|
EXEC DBMS_CLOUD_AI.SET_PROFILE('PROFILE_GPT_5_5_SELECTAI');
|
|
|
|
-- ============================================================================
|
|
-- Ejemplo 1: sinonimos de comercios y categorias
|
|
-- ============================================================================
|
|
-- Las annotations indican que T_COMERCIOS representa "Comercios participantes"
|
|
-- y que NAME tambien puede ser entendido como tienda, local, merchant o comercio.
|
|
-- El prompt usa lenguaje de negocio, no nombres tecnicos de columnas.
|
|
|
|
-- select ai
|
|
SELECT AI runsql Muestra los locales participantes por rubro, indicando el comercio, la categoria y la procesadora de pago.;
|
|
|
|
|
|
SELECT JSON_SERIALIZE(
|
|
DBMS_CLOUD_AI.GENERATE(
|
|
prompt => 'Muestra los locales participantes por rubro, indicando el comercio, la categoria y la procesadora de pago.',
|
|
profile_name => 'PROFILE_GPT_5_5_SELECTAI',
|
|
action => 'runsql'
|
|
) returning CLOB pretty);
|
|
|
|
-- ============================================================================
|
|
-- Ejemplo 2: beneficio por segmento, compra minima y tope
|
|
-- ============================================================================
|
|
-- Las annotations explican que "nivel" tambien puede significar segmento o
|
|
-- categoria de cliente, y que "tope" es el reintegro maximo en guaranies.
|
|
-- El prompt usa esos sinonimos para mostrar como SELECT AI entiende el negocio.
|
|
|
|
SELECT AI runsql
|
|
Para cada segmento de cliente, lista el porcentaje de reintegro,
|
|
la compra minima requerida y el tope maximo de devolucion en guaranies.
|
|
;
|
|
|
|
-- ============================================================================
|
|
-- Ejemplo 3: pregunta de negocio cruzando comercios y niveles
|
|
-- ============================================================================
|
|
-- Este ejemplo combina tres tablas. Las relationship_hint de T_ROOT, T_COMERCIOS
|
|
-- y T_BENEFICIOS_POR_NIVEL ayudan al modelo a entender que ambas listas hijas
|
|
-- pertenecen al mismo documento de promocion.
|
|
|
|
SELECT AI runsql
|
|
Combine los comercios participantes con los beneficios por nivel de cliente del mismo documento.
|
|
Muestra rubro, comercio, procesadora, nivel del cliente, porcentaje de reintegro, compra minima
|
|
y limite maximo de devolucion.
|
|
;
|
|
|
|
|
|
|