Problemas con package

Tengo un package que contiene un procedure con un cursor, necesito leventar los datos que obtiene el cursor y guardarlo en un v_table tipo table y ponerlo como parámetro de salida para que otro programa con una llamada reciba ese array... Ahora bien yo hice el código pero cuando intento ejecutarlo en el toad me da el sig. Error: "You cannot access feild data beyond Eof"

1 respuesta

Respuesta
1
Bien me imagino que la variable de tipo tabla para guardar el resultado de todo un registro la habrás definido v_table nombre_tabla%rowtype.
¿El error que te da en el TOAD en que momento de la ejecución te esta ocurriendo?
Creo que tiene que ver con la terminación del procedimiento, revisa que no haya ninguna "/" al final.
Prueba a comentar lo de la variable tipo tabla y pon en su lugar un único campo y una variable normal y comprueba si te sigue dando el error, creo que no tiene nada que ver con lo de la variable tipo tabla
Si obvio que tengo / al final del spec y del body de los packages sino no compila. Con respecto a lo del tipo tabla probé pero no funciona.
EL momento es ni bien quiero ejecutar, es más me tira el error inmediatamente después que compila...
Es un error en la terminación del package, ni tan siquiera te deja ejecutarlo.
Si guardas el resultado del cursor en una variable de tipo %rowtype lo que haces es guardar todo el contenido del registro de la tabla en una variable. Para ello lo que tienes que hacer es seleccionar en el cursor todos los campos de la tabla ya que la variable debe ser de la misma estructura que el registro de tabla.
(select * into v_tabla from tabla)
Si no lo haces así te dará error en la variable.
Para luego hacer mención a un valor de un campo de la tabla que esta almacenado en esta variable seria v_tabla. Campo
¿Dónde tienes el package? ¿En un fichero y desde este fichero lo ejecutas en Base de datos?
Si es así asegurate que después de la / haya una linea más en blanco.
Si te sigue fallando haz un fichero para las especificaciones y otro para el body o también desde Forms puedes codificarlo en Objetos de Base de datos y al compilar te lo graba directamente en la base de datos.
No lo tengo en un archivo, está almacenado en la BD y lo edito con el TOAD, no uso Forms, es solo PL/SQL que luego lo llamará un RPG de AS400. Necesito pasarle como param de salida un vector con el resultado de un cursor.
Probé todas tus opciones pero sigue dando errores... Gracias de todos modos
:=)
Vamos a ver, si pones la termainacion / te compila bien y sin errores, te tiene que crear un cuerpo (body) y cabecera (especificaciones).
Dices que al ejecutarlo te da el error "You cannot access feild data beyond Eof" o ese error te da al compilar.
Si te da al compilar hasta que no lo resuelvas no ejecutes nada, si te da al ejecutar no creo que tenga nada que ver con la variable de tipo tabla.
Para pasar un registro del cursor la única forma es pasar un parámetro tipo tabla, para ello lo que seleccionas en el cursor debe ser todo un registro de una sola tabla, la tabla es la que has asociado a la variable.
Otra forma de hacerlo es definir una variable de tipo cursor la cual va a conterner el resultado de una fila del cursor sean cuales sean los campos que has seleccionado en ese cursor y las tablas a las que pertenezcan.
La variable debes declararla así:
variable nombre_cursor%rowtype.
ejemplo: Si el cursor es " cursor cursor_1 is select campo1, campo2, ....."
v_cursor cursor_1%rowtype.
Esta variable no te tiene que dar problemas a la hora de manipularla pudiéndola pasar como parámetro, recepcionar ese parámetro ya no se como se hace puesto que no conozco RPG, hay que tener en cuenta que esta variable es omo una estructura donde en la misma se encontraría v_cursor. campo1, v_cursor. Campo2, etc...
En cuanto al error para saber definitivamente si se tiene que ver con la variable o no, lo que yo haría seria una pequeña prueba que consiste en lo siguiente:
- Selecciona un solo campo en el cursor y guardala en una variable normal definiendola del tipo de dato que corresponde al campo seleccionado.
- Ejecutalo y compryueba si te falla, si te sigue saliendo el mismo error significa que no tiene nada que ver el error con la varianble del cursor, si no falla entonces ya tienes una pista y el problema es que esta mal programada esa variable.
Otra idea que se me ocurre para pasar el registro seleccionado al modulo RPG es que el resultado del cursor lo vuelques a un fichero plano y que el RPG luego lo lea o a una tabla temporal para que el modulo RPG lea el registro de esa tabla.
Muchas gracias por la aclaración del cursor y los tipos tablas me quedó claro... El problema es cuando lo intento ejecutar, compila bien y me da el sig. error :
ERROR at line 2:
ORA-06550: line 2, column 12:
PLS-00302: component 'PAC_CUMPLE' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
Ni siquiera puedo ver todavía si levanta el cursor los datos o no...
Este error es nuevo...
Tienes que tener todos lod procedimientos declarados en las especificaciones.
PAC_CUMPLE que es?. Es un procedimiento dentro del paquete.
Si ya lo tienes declarado mira que la sintaxis de la linea anterior este bien finalizada.
Pero este error aunque te da cuando lo ejecutas se refiere a un error de la compilación.
Cuando ejecutas la package lo que hace es compilarla para reemplazarla en Base de datos, el error que te da es de compilación, ni siquiera se ha ejecutado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas