es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede ejecutar el procedimiento almacenado. Se produjo un error al llamar a o91.prepareCall. [Controlador JDBC] Índice de cadena fuera de rango: 33.

Estoy utilizando py4j para ejecutar un procedimiento almacenado (Redshift). La conexión JDBC se crea en AWS Glue. A continuación se muestra el código:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue import DynamicFrame

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
logger = glueContext.get_logger()
job = Job(glueContext)
job.init(args["JOB_NAME"], args)

source_jdbc_conf_flywheel = glueContext.extract_jdbc_conf('Redshift_QA')

from py4j.java_gateway import java_import
java_import(sc._gateway.jvm,"java.sql.Connection")
java_import(sc._gateway.jvm,"java.sql.DatabaseMetaData")
java_import(sc._gateway.jvm,"java.sql.DriverManager")
java_import(sc._gateway.jvm,"java.sql.SQLException")
java_import(sc._gateway.jvm,"java.sql.CallableStatement")

dummy_url=source_jdbc_conf_flywheel.get('url')+"/"+'fwdb'

conn = sc._gateway.jvm.DriverManager.getConnection(dummy_url, source_jdbc_conf_flywheel.get('user'), source_jdbc_conf_flywheel.get('password'))
cstmt= conn.prepareCall("{call fwdb.fw.sp_unload_brand_to_datalake(?,?)}")
cstmt.setString(1, "xyz")
cstmt.setString(2, "xyz")
cstmt.execute()
conn.close()

Sigo obteniendo un error de “índice fuera de rango de cadena”. El procedimiento almacenado toma dos parámetros y descarga los resultados a S3. Por favor, ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con los valores de entrada que se están pasando al procedimiento almacenado. El mensaje de error indica que el rango de índice de la cadena de entrada está fuera de límites. Verifique si los valores de los parámetros que se están pasando al procedimiento almacenado son correctos y están en el formato correcto. Además, asegúrese de que el procedimiento almacenado pueda manejar los parámetros que se le están pasando.

    Es posible que desee depurar su código verificando los valores reales de los parámetros antes de ejecutar el procedimiento almacenado. Puede hacer esto imprimiendo los valores o utilizando un depurador para recorrer el código.

    Además, asegúrese de que el bucket de S3 en el que está intentando descargar los resultados tenga los permisos adecuados y sea accesible por el trabajo de AWS Glue.

Comments are closed.