Oracle - Store Procedure Oracle

 
Vista:

Store Procedure Oracle

Publicado por Gabriela Pineda (4 intervenciones) el 28/12/2007 18:25:05
Buenos dias, estoy creando un store procedure en Oracle para obtener el resultado de un query (select) , de acuerdo a los parámetros de fecha que intruzco, cada campo lo guardo en variables, pero no me entrega datos, si ejecuto el query por fuera si obtengo datos, intente hacerlo con un cursor y me da el mismo resultado. Espero que alguien pueda ayudarme para verificar si es posible hacer esto, ya que tengo entendido que los SP Oracle son para hacer operaciones con la información y no para solo mostrar datos. 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:Store Procedure Oracle

Publicado por Rodolfo Reyes (445 intervenciones) el 29/12/2007 15:55:00
Lo que quieres se hace por medio devolviendo la información en un tipo de dato Ref Cursor. Te pongo un ejemplo de como puedes utilizarlo:

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

RE:Store Procedure Oracle

Publicado por Gabriela Pineda (4 intervenciones) el 31/12/2007 20:18:36
Muchas gracias por la ayuda, tengo una pregunta: este enunciado
dbms_output.put_line('Nombre : '||vtable_name||' ,Tablespace : '||vtablespace_name);

trae como resultado todo en una misma fila, como le hago para que se muestre la informacion de nombre en una columna y el Tablespace en otra columna?

Saludos!
Feliz Año 2008!!!
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

RE:Store Procedure Oracle

Publicado por Rodolfo Reyes (445 intervenciones) el 02/01/2008 20:42:12
Realmente te lo esta devolviendo en dos campos "vtable_name", "vtablespace_name". simplemente para efectos del ejemplo se concatenaron las salidas en una sola linea.

Supongo que esta información la haz de estar capturando con algun programa(Visual basic, Developer, etc.). ¿Que programa estas utilizando?
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

RE:Store Procedure Oracle

Publicado por Gabriela Pineda (4 intervenciones) el 02/01/2008 20:50:02
Este es el resultado del select de 4 campos:
DBMS Output for Batch 1 ---> 2008-01-02 00:00:02,000 49652 28233 21419, pero me sale en una sola columna,
yo necesito que me salga por separado por ejemplo:
DBMS Output for Batch 1 ---> 2008-01-02 00:00:02,000
DBMS Output for Batch 2 ---> 49652
DBMS Output for Batch 3 ---> 28233
DBMS Output for Batch 4 ---> 21419

la comunicacion y muestra de información es en PHP, pero al ejecutar
ora_parse($cursor,"exec nombreProcedimiento");
me da el error:
<b>Warning</b>: ora_parse() [<a href='function.ora-parse'>function.ora-parse</a>]: Ora_Parse failed...

Muchas gracias.
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

RE:Store Procedure Oracle

Publicado por Gabriela Pineda (4 intervenciones) el 02/01/2008 20:59:26
Este es el resultado DBMS Output for Batch 1--"vtable_name", "vtablespace_name"

lo que necesito es

DBMS Output for Batch 1-- "vtable_name"
DBMS Output for Batch 2-- "vtablespace_name"

estoy utilizando ora_parse($cursor,"exec nombreProcedimiento");
pero me da el siguiente error

<b>Warning</b>: ora_parse() [<a href='function.ora-parse'>function.ora-parse</a>]: Ora_Parse failed...
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

RE:Store Procedure Oracle

Publicado por Rodolfo Reyes (445 intervenciones) el 03/01/2008 16:46:34
Busca algun ejemplo de como utilizar un Ref Cursor desde PHP. Lo que pasa es que este es un tipo de dato algo rarro y siempre se le tiene que dar un tratamiento bien especial.

Abre google y busca lo siguiente:

Ref Cursor PHP

Al hacerlo te saldran varios ejemplos de como utilizar un Ref Cursor con PHP.

Yo nunca he trabajado con PHP así que en este punto no puedo ayudarte.
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

RE:Store Procedure Oracle

Publicado por Alpem (2 intervenciones) el 22/11/2012 20:40:40
Que asquerosidad tener que escribir toda esa cantidad de lineas de codigo para retornar un simple select.
En que pensaron los desarrolladores de Oracle para sacar eso, fijate la diferencia con SQLServer.
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