Oracle - Procedimiento almacenado en Crystal

 
Vista:

Procedimiento almacenado en Crystal

Publicado por vlg1971 (7 intervenciones) el 21/09/2006 13:57:33
Hola a todos, mi pregunta es la siguiente, ¿desde un procedimiento almacenado se podria llegar a mostrar su resultado en un report de CRISTAL REPORTS?, he visto que Crystal Reports da la posibilidad de insertar un procedimiento pero no lo tengo claro, os paso mi idea el procedimiento almacenado seria el siguiente

create or replace procedure BORRAR is

CURSOR tablas IS
SELECT 1 FROM DUAL;
begin

OPEN tablas;
-- recorrer cursor
LOOP
FETCH tablas INTO ptotaltablas;
EXIT WHEN tablas%NOTFOUND;

dbms_output.put_line(ptotaltablas);

END LOOP;
-- cerrar cursor
CLOSE tablas;
begin

end BORRAR;

Bien este procedimiento almacenado retorna "1" , cuando este procedimiento almacenado lo inserto en Crystal no me da la posibilidad de insertar ningun campo, supongo que el problema esta en la construccion del procedimiento, ¿me podeis explicar como hacer que el procedimiento retorne un valor y desde crystal lo pueda obtener?

MUCHAS GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Procedimiento almacenado en Crystal

Publicado por Rodolfo Reyes (445 intervenciones) el 21/09/2006 20:40:13
con el dbms_output.put_line(ptotaltablas);
No estas regresando los registros, simplemente los estas enviando a la pantalla.

Para poder regresar varios registros tienes que regresar los valores en el tipo de dato REF_Cursor.

Este es un ejemplo:

--Aqui estas creando un paquete el cual tiene el REF Cursor
create or replace PACKAGE ejemplo_package IS
--Declaro el tipo ref cursor
TYPE var_refcursor IS REF CURSOR;

--Declaro la función que retorna el ref cursor
FUNCTION retorna_datos RETURN var_refcursor;
END ejemplo_package;
/

create or replace PACKAGE BODY ejemplo_package IS

FUNCTION retorna_datos RETURN var_refcursor IS
var_cursorpackage var_refcursor;

BEGIN
OPEN var_cursorpackage FOR
SELECT table_name ,
tablespace_name
FROM user_tables
WHERE rownum < 10 --Sólo muestro 9 , pues es un ejemplo
;

RETURN var_cursorpackage;
END;
END ejemplo_package;
/

----------------------------
-Este es un dodigo de PL/SQL para poder ver lo que regresa el Ref Cursor
----------------------------
declare

--Declaración de la variable de tipo REF CURSOR
v_refcursor ejemplo_package.var_refcursor;

--Declaración de variables para dejar los valores rescatados desde el REF CURSOR
vtable_name varchar2(1000);
vtablespace_name varchar2(1000);

begin
--Se llama al package que retorna los datos desde un cursor
v_refcursor := ejemplo_package.retorna_datos;

--Se rescata el valor desde elref cursor haciendo un fetch
FETCH v_refcursor
INTO vtable_name ,
vtablespace_name;

WHILE v_refcursor%FOUND LOOP
dbms_output.put_line('Nombre : '||vtable_name||' ,Tablespace : '||vtablespace_name);
FETCH v_refcursor
INTO vtable_name ,
vtablespace_name;
END LOOP;

--Se cierra el cursor que fue abierto al momento de realizar la llamada al package
CLOSE v_refcursor;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar