Oracle - procedimiento almacenado

 
Vista:

procedimiento almacenado

Publicado por PEDRO (1 intervención) el 07/11/2008 23:02:03
SALUDOS.
estoy tratando de hacer un procedimiento almacenado que le pase la fecha y me haga una busqueda el detalle es k me marca un error estoy empezando ha usar Oracle y pues no tengo idea del porque esta mal ??

create procedure PSD_TABLA (F_INICIO DATE) AS
BEGIN
SELECT * FROM MyTABLA WHERE TRUNC(TO_DATE(F_INICIO_COBERTURA)) = TO_DATE(:F_INICIO)
END
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

Publicado por reyes ruano (59 intervenciones) el 08/11/2008 00:01:20
Supongo que lo que estas intentando hacer es que el procedimiento te devuelva los N registros resultado de la consulta que ejecutas. Pero el codigo de PL/SQL no funciona de esta manera. El resultado de la consulta se lo tienes que asignar a algo, y este algo es el que devuelves.

Generalmente esto se hace por medio de un Ref Cursor.

Aqui te pongo un ejemplo completo de como puedes hacerlo:

Con este pequeño còdigo explico como mostrar un refcursor desde Pl/sql, muy ùtil para cuando necesitas comprobar datos, o simplemente procesarlos

-- Creado pro Hector Gabriel Ulloa Ligarius
-- 27 de Julio del 2005
-- Como mostrar un refcursor desde PL/SQL

--------------------
--Código del package
--------------------

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;
/

----------------------------
--Código de un bloque Pl/Sql
----------------------------
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