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; /