From 142e86c61868bb4f43401b60ab93ef806283eef4 Mon Sep 17 00:00:00 2001 From: flealdba Date: Fri, 8 May 2026 13:10:38 +0000 Subject: [PATCH] Upload files to "/" --- proc_26ai_info_cases.sql | 72 +++++++++++++++++++++++ proc_26ai_llm_chart.sql | 86 ++++++++++++++++++++++++++++ proc_26ai_query_insights_pending.sql | 23 ++++++++ 3 files changed, 181 insertions(+) create mode 100644 proc_26ai_info_cases.sql create mode 100644 proc_26ai_llm_chart.sql create mode 100644 proc_26ai_query_insights_pending.sql diff --git a/proc_26ai_info_cases.sql b/proc_26ai_info_cases.sql new file mode 100644 index 0000000..8cbc256 --- /dev/null +++ b/proc_26ai_info_cases.sql @@ -0,0 +1,72 @@ +create or replace procedure proc_26ai_info_cases( p_language in varchar2 default 'pt-BR', + p_app_user in varchar2 , + p_industry in varchar2 , + p_result out clob , + p_comp_id in varchar2 , + p_oci_cred in varchar2 default 'OCI_CRED', + p_flag_has_audio in varchar2 default 'N' + ) +as + v_clob clob; + v_prompt clob; + v_language varchar2(200) := p_language; -- ["pt-BR","en-US","es-ES","cmn-CN"] + v_text2speech clob; +begin + + for r1 in ( + SELECT JSON_OBJECT( + 'case_name' VALUE c.case_name, + 'case_desc' VALUE c.case_desc, + 'technologies' VALUE c.technologies, + 'industry_name' VALUE i.industry_name + ) AS case_json + FROM demo_case c + JOIN demo_industry i + ON c.industry_id = i.industry_id + WHERE upper(i.industry_name) = upper(p_industry) ) loop + + v_clob := v_clob || r1.case_json; + + end loop; + + v_prompt := 'Casos de uso da indústria ' || p_industry || ' neste portal APEX, chamado de 26ai Demo Hub: ' || v_clob; + + v_text2speech := FNC_26ai_rag(p_ai_prompt => '#O que esta plataforma mostra? +-Como IA nativa do Oracle 26ai reduz custos +-Como acelerar operações +-Como automatizar tarefas críticas +-Como melhorar a experiência do cliente +-Como acelerar inovação + +#Conteúdo: ' || v_prompt || '. + +#Cite "Histórias de Transformação", contendo dados da indústria de ' || p_industry || ': +✔ Problema real +✔ Como a IA do Oracle poderia atuar +✔ Resultados estimados ou conhecidos + +#Adicione no topo de cada indústria: +Headline de negócio: Um mini storytelling de 20 linhas explicando o antes/depois com IA + +#Nosso objetivo de perceção: não é "um APEX com telas", é uma plataforma de valor. + +#REGRAS + O retorno deste RAG deve ser gerado OBRIGATORIAMENTE em ' || v_language || '.', + p_oci_cred => p_oci_cred, + p_comp => p_comp_id); + + p_result := v_text2speech; + + if p_flag_has_audio = 'Y' then + + pck_26ai_apis.api_text2speech(p_text => v_text2speech, + p_filename => replace( lower( p_app_user ),'@oracle.com','_') || to_char(sysdate,'rrrrmmddhh24miss') || '.mp3', + p_bucket => 'https://objectstorage.us-phoenix-1.oraclecloud.com/p/lK6O6NVuxHZK3S86Vn1E_9PYh2k7t1EcTYmhFuB2WqHa66CaXed1iziydQyGpyQE/n/idi1o0a010nx/b/bucket-26ai-demo-hub-text2speech/o/' , + p_comp_id => p_comp_id, + p_credential => p_oci_cred, + p_language_code => v_language) ; + + end if; + +end; +/ \ No newline at end of file diff --git a/proc_26ai_llm_chart.sql b/proc_26ai_llm_chart.sql new file mode 100644 index 0000000..4693ce3 --- /dev/null +++ b/proc_26ai_llm_chart.sql @@ -0,0 +1,86 @@ +create or replace procedure proc_26ai_llm_chart(p_session_id in number, + p_user_name in varchar2, + p_prompt in varchar2, + p_conv_id in number + ) +as +/* + + Criado por: fernando.leal@oracle.com + Data: Oct/2025 + Objetivo: demonstrar casos de uso do Oracle AI Database 26ai + + v1 - graficos em componente de chat - leal + +*/ +/* +SELECT + jt.X, + jt.Y +FROM TB_CHART d, + JSON_TABLE( + d.RUNSQL, '$[*]' + COLUMNS ( + x VARCHAR2(50) PATH '$.X', + y NUMBER PATH '$.Y' + ) + ) jt +where session_id = :app_session +and conv_id = :P37_CONV_ID + +*/ + v_context clob; + v_response clob; + v_conv_id number; + v_showsql clob; + v_runsql clob; + v_title clob; + v_debug varchar2(1) default 'Y'; + -- create table tb_chart_test2 ( title varchar2(200), runsql clob ) + v_profile_selectai varchar2(200) := 'PROF_TELECOM_V1'; + v_prompt varchar2(32000); +begin + + v_prompt := 'Você é um especialista em Oracle SQL.' || + ' Crie um comando para que seja possível montar um gráfico, trazendo apenas 2 colunas, que assegure existir dados para eixo X e dados para eixo Y.' || + ' REGRA: NUNCA use o nome das colunas, use sempre X e Y. Procure associar ao eixo X e Y as informacoes mais importantes para que o gráfico agregue insigths do negócio.' || + ' Exemplo 1: "Faça um grafico da evolução de venda de produtos" . O eixo X deve ter o nome dos produtos, e eixo Y o total de vendas.' || + ' Exemplo 2: "Faça um grafico sobre reclamacoes realizadas? Eixo X tem as reclamacoes agrupdas com GROUP BY e eixo Y a quantidade encontrada com COUNT' || + ' Prompt: ' || p_prompt; + + SELECT DBMS_CLOUD_AI.GENERATE(prompt => v_prompt, + profile_name => v_profile_selectai, + action => 'runsql') response + into v_runsql ; + + if v_debug = 'Y' then + + SELECT DBMS_CLOUD_AI.GENERATE(prompt => v_prompt, + profile_name => v_profile_selectai, + action => 'showsql') response + into v_showsql ; + + end if; + + SELECT DBMS_CLOUD_AI.GENERATE(prompt => 'Qual melhor título para um gráfico que será gerado por este prompt: ' || p_prompt || '.' || + 'REGRAS: máximo permitido são 6 palavras. Seja claro e o mais sucinto possível. RETORNE apenas o título. Não de nenhuma outra explicacação.', + profile_name => v_profile_selectai, + action => 'chat') response + into v_title ; + + delete "TB_26AI_CHART" + where SESSION_ID = p_session_id + and conv_id = p_conv_id; + + insert into "TB_26AI_CHART" + values(p_session_id, + p_user_name, + sysdate, + v_title, + v_runsql, + v_showsql, + p_conv_id, + null); + commit; +end; +/ \ No newline at end of file diff --git a/proc_26ai_query_insights_pending.sql b/proc_26ai_query_insights_pending.sql new file mode 100644 index 0000000..663bf99 --- /dev/null +++ b/proc_26ai_query_insights_pending.sql @@ -0,0 +1,23 @@ +create or replace procedure PROC_26ai_query_INSIGHTS_PENDING(p_query_id in number default null) +as + +begin + for r1 in ( select query_id + from TB_26AI_QUERY_HISTORY + where INSIGHT_DATE is null + and (query_id = p_query_id or p_query_id is null ) + order by REGISTER_DATE + ) loop + + insert into tb_26ai_query_insight + select * from table( FNC_26ai_query_INSIGHTS_LIST( r1.query_id ) ); + + update TB_26AI_QUERY_HISTORY + set INSIGHT_DATE = sysdate + where query_id = r1.query_id ; + + commit; + + end loop; +end; +/ \ No newline at end of file