Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Límite en la longitud de los parámetros de los procedimientos almacenados.

Estas en el tema de Límite en la longitud de los parámetros de los procedimientos almacenados. en el foro de Oracle en Foros del Web. Hola. Estoy trabajando con procedimientos almacenados. Veo que en los parámetros de un procedimiento almacenado no hay que especificar la longitud, sólo el tipo. ¿Cómo ...
  #1 (permalink)  
Antiguo 06/05/2009, 05:02
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 17 años, 7 meses
Puntos: 0
Límite en la longitud de los parámetros de los procedimientos almacenados.

Hola.

Estoy trabajando con procedimientos almacenados. Veo que en los parámetros de un procedimiento almacenado no hay que especificar la longitud, sólo el tipo.
¿Cómo puedo darle a un parámetro de un procedimiento almacenado una longitud mayor a la que tiene por defecto?

Ejemplo: tengo un parámetro que es un VARCHAR2. Sin embargo esto me lo limita a 200 caracteres que me es insuficiente.

Gracias de antemano!
  #2 (permalink)  
Antiguo 06/05/2009, 05:31
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

En absoluto, no existe tal limitación para ningún tipo en los argumentos, hago un copy/paste de la documentación, Referencia SQL, CREATE PROCEDURE.

datatype
Specify the datatype of the argument. An argument can have any datatype supported by PL/SQL.

Datatypes cannot specify length, precision, or scale. For example, VARCHAR2(10) is not valid, but VARCHAR2 is valid. Oracle Database derives the length, precision, and scale of an argument from the environment from which the procedure is called.


http://download.oracle.com/docs/cd/B...htm#SQLRF01309

Saludos
  #3 (permalink)  
Antiguo 06/05/2009, 05:39
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Es verdad, tienes razón.
He probado a llamar al procedimiento desde otro y sí que me pasa todos los caracteres del VARCHAR2 (en este caso son más de 10 mil). Sin embargo, al intentar recuperarlo desde Java obtengo el siguiente error:

java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character string buffer too small

¿Hay algún límite en Java o tengo algo mal?

Muchas gracias!!
  #4 (permalink)  
Antiguo 06/05/2009, 05:48
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Vas a tener que hacer un debug del código, no se puede decir en que punto se genera ese error, puede ser en la llamada al procedimiento o en medio de la ejecución.

Saludos
  #5 (permalink)  
Antiguo 06/05/2009, 06:00
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

El error salta en el PL/SQL:

Código:
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "ESQUEMA.PAQUETE", line 285
ORA-06512: at line 1

        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:180)
        at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:869)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1153)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2932)
Luego de esto ya se propaga a Java que es el que captura la excepción y muestra el mensaje.

¿Puede ser algo del JDBC?
  #6 (permalink)  
Antiguo 06/05/2009, 06:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Decir también que estoy usando esto para recoger el VARCHAR2 que tengo como parámetro de salida (el cual tiene más de 10 mil caracteres) en el procedimiento almacenado:

cstmt.registerOutParameter(index++, OracleTypes.VARCHAR);

Siendo cstmt un CallableStatement.

¿Puede ser que desde Java sólo deje sacar 2000 o 4000 caracteres?
  #7 (permalink)  
Antiguo 06/05/2009, 10:19
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Cita:
ORA-06512: at "ESQUEMA.PAQUETE", line 285
¿Que hay en esa línea?

Saludos
  #8 (permalink)  
Antiguo 07/05/2009, 00:19
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Pues supongo que lo que pone, amigo Matanga.
Ha sustituido el propietario del paquete (1) y el nombre del paquete (2) por ESQUEMA (1) PAQUETE (2) ¿ no ?
  #9 (permalink)  
Antiguo 11/05/2009, 20:40
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años
Puntos: 7
Respuesta: Límite en la longitud de los parámetros de los procedimientos almacenados.

Cita:
Iniciado por jc3000 Ver Mensaje
Pues supongo que lo que pone, amigo Matanga.
Ha sustituido el propietario del paquete (1) y el nombre del paquete (2) por ESQUEMA (1) PAQUETE (2) ¿ no ?
jejeje en teoria si pero asi como mostro el error me parece que asi esta el codigo "esquema.paquete" como tal, y no como suponemos que deberia, ya nos platicara despues el problema

y ahora que lo pienso, la palabra "esquema" no es palabra reservada (hasta donde me acuerdo) por lo que se podria crear el usuario "esquema" sin problema, y los mismo para "paquete" aunque mas bien seria procedimiento o funcion no? un paquete se tendria que llamar paquete.funcion o paquete.procedimiento
__________________
Blogzote.com :-) Mi blog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.