ORACLE, mostrar salida de un procedimiento

-L0B0-

Buenas,

Resulta que tengo creado un procedimiento que devueve 2 parámetros de salida:

-El primero es de tipo varchar2 y sirve para ver si el proc ha ido bien. Su contenido sera 'ok', o 'error tal...'.

-El segundo parámetro de salida devuelve una objeto tipo tabla. Es decir primero me he creado un tipo de datos , y despues he creado otro tipo de datos "TABLE" de filas del otro tipo.

Es decir:

create or replace TYPE TIPO_MODELO AS OBJECT (
  codi           NUMBER,
  modelo          NUMBER 
);
/
   
create or replace TYPE TA_MODELOS AS TABLE OF TIPO_MODELO;
/

Como leches veo el contenido de la tabla que devuelvo? xD

Si solo devolviese el parámetro VARCHAR lo haria así:

DECLARE
RSP VARCHAR2(500);
BEGIN
SP_procedimento_tal(2, RSP);   // el 2 es un parámetro de entrada pero no viene al caso..
DBMS_OUTPUT.PUT_LINE(RSP);
END;

Como lo hago para hacer lo mismo? Lo que yo quiero seria algo asi como DBMS_OUTPUT.PUT_TABLE/b;

Pero eso no existe :(


Thanks


EDIT: ya he probado a hacer un select pero no rula pq realmente no es una tabla de la BD, solo es un tipo de datos en forma de tabla por asi decirlo

zoeshadow

http://www.devjoker.com/html/Tablas-PL-SQL.html

 FOR i IN misCiudades.FIRST..misCiudades.LAST
 LOOP
     dbms_output.put_line(misCiudades(i));
 END LOOP;

no se si será eso exactamente lo que buscas, pero google te puede ayudar mas rápidamente xD

bLero

Para que lo necesitas exáctamente?

La verdad que nunca he usado ese tipo de dato en PLSQL, lo que puedes hacer si quieres mostrar las filas es recorrerlas con un bucle e imprimir los atributos que quieras con dbms_output.put_line()

-L0B0-

gracias a los 2. Le echare un vistazo a ese link.

Pues no se muy bien si debería de delvolverlo asi.. Se supone que la BD alimentará a un programa que podrá hacer unas consultas preestablecidad ( estos procedimientos). Entonces entiendo que tengo que devolverle un objeto con el resultado de la consulta y luego el que se lo procese como quiera.

Pero aparte de eso queria mostrar los datos mas que nada para la documentación.

De todas formas todo esto no es real. Es parte de un trabajo de la carrera y la verdad es que no se muy bien como se suele hacer.

Al final no me he rayado y lo hago con una función delvolviendo solo la tabla y no el otro parámetro. Lo curioso es que siendo exactamente el mismo objeto, si hago return con una función sale la consulta por pantalla de pm, pero si lo devuelvo con procedimiento no deja..

R3DKNIF3

No entiendo muy bien lo que quieres hacer.

Pero no es más fácil que crees una tabla y la rellenes mediante el procedimiento a base de inserts?

aNuBiS

Si usas SQLDeveloper, hay una opción para ver el resultado de los procedures desde el menu view, tienes que indicar en una de las opciones la conexión que realizas a la DB y ya se mostrará por pantalla en una ventana.

Si es directamente no tengo ni idea :(.

bLero

Yo lo que no entiendo es porque necesitas usar un procedimiento, si lo que quieres es mostrar una tabla puedes crear una vista con la consulta necesaria y luego procesar la vista, o si no te importa el nivel de acceso hacer la consulta directamente con JDBC u ODBC y muestras lo necesario.

16 días después
Sergeon

Si he entendido bien lo que quieres, que lo dudo, sería algo así como:

dbms_output.putline(ta_modelos.codi);

o:

dbms_output.putline(ta_modelos.modelo);

para obtener el otro valor. Lógicamente puedes usar || para concatenar y sacar los dos en el mismo output. Pero es una tontería tan grande que seguro que me he perdido algo.

Btw, no es un tipo de datos en forma de 'tabla'. Las table son tipos de datos rollo ArrayList
o hashTable de Java por entendernos, no tienen nada que ver con las relaciones del modelo relacional, son cosas totalmente distintas.

Definitivamente no estoy muy seguro de que hayas conseguido explicar muy bien lo que necesitas, o yo me he perdido mucho :D

Usuarios habituales

  • Sergeon
  • bLero
  • aNuBiS
  • R3DKNIF3
  • -L0B0-
  • zoeshadow