Corrige insercao de JSON grande no Oracle usando CLOB

This commit is contained in:
Frederico Castro
2025-12-13 17:22:50 -03:00
parent 93fb0d8a39
commit f1377634b2

View File

@@ -15,6 +15,8 @@ class RankingOracleRepository:
Insere ou atualiza um batch de consultores usando MERGE. Insere ou atualiza um batch de consultores usando MERGE.
Retorna o número de registros processados. Retorna o número de registros processados.
""" """
import cx_Oracle
if not consultores: if not consultores:
return 0 return 0
@@ -31,7 +33,7 @@ class RankingOracleRepository:
:componente_d AS COMPONENTE_D, :componente_d AS COMPONENTE_D,
:ativo AS ATIVO, :ativo AS ATIVO,
:anos_atuacao AS ANOS_ATUACAO, :anos_atuacao AS ANOS_ATUACAO,
:json_detalhes AS JSON_DETALHES TO_CLOB(:json_detalhes) AS JSON_DETALHES
FROM DUAL FROM DUAL
) s ) s
ON (t.ID_PESSOA = s.ID_PESSOA) ON (t.ID_PESSOA = s.ID_PESSOA)
@@ -64,6 +66,8 @@ class RankingOracleRepository:
cursor = conn.cursor() cursor = conn.cursor()
try: try:
for consultor in consultores: for consultor in consultores:
json_str = json.dumps(consultor.get("detalhes", {}), ensure_ascii=False)
cursor.setinputsizes(json_detalhes=cx_Oracle.CLOB)
params = { params = {
"id_pessoa": consultor["id_pessoa"], "id_pessoa": consultor["id_pessoa"],
"nome": consultor["nome"], "nome": consultor["nome"],
@@ -74,7 +78,7 @@ class RankingOracleRepository:
"componente_d": consultor["componente_d"], "componente_d": consultor["componente_d"],
"ativo": "S" if consultor["ativo"] else "N", "ativo": "S" if consultor["ativo"] else "N",
"anos_atuacao": consultor["anos_atuacao"], "anos_atuacao": consultor["anos_atuacao"],
"json_detalhes": json.dumps(consultor.get("detalhes", {}), ensure_ascii=False) "json_detalhes": json_str
} }
cursor.execute(merge_sql, params) cursor.execute(merge_sql, params)