Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Crear bloque de datos con procedimiento

Estas en el tema de Crear bloque de datos con procedimiento en el foro de Oracle en Foros del Web. Hola a todos, hace poco escribi para solicitar ayuda en un problema con el oracle forms builder, no he conseguido todavia solucionar ese problema, pero ...
  #1 (permalink)  
Antiguo 01/11/2011, 04:58
Avatar de saunier  
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Crear bloque de datos con procedimiento

Hola a todos, hace poco escribi para solicitar ayuda en un problema con el oracle forms builder, no he conseguido todavia solucionar ese problema, pero creo que la solucion de mi problema estaria en poder crear un bloque de datos desde un procedimiento.

Alguien podria postearme un ejemplo de un procedimiento para la creacion de un bloque de datos o un link donde se explique como se realiza, por favor. He buscado por internet y no encuentro nada.

Un saludo.
  #2 (permalink)  
Antiguo 02/11/2011, 17:08
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 4 meses
Puntos: 85
Respuesta: Crear bloque de datos con procedimiento

No estoy seguro a que te refieres con crear un bloque de datos desde un procedimiento, si es devolver un conjunto de resultados desde un procedimiento, lo puedes hacer definiendo una variable de tipo sys_refcursor como parámetro de salida.

Código:
create or replace procedure p1(c out sys_refcursor)
is
begin
open c for select * from dual;
end;
Saludos
  #3 (permalink)  
Antiguo 04/11/2011, 07:12
Avatar de saunier  
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Crear bloque de datos con procedimiento

Gracias Matanga por responder, con "crear un bloque de datos desde un procedimiento" me refiero a cuando en el oracle forms builder (tengo la version 9 que se encuentra en el develper 10g) usas el asistente para crear un bloque de datos (esto se encuentra en herramientas).

Al ejecutar el asistente la primera ventana que aparece te da dos opciones a elegir o crear desde tabla/vista o crear desde procedimiento almacenado. A mi me gustaria ver un ejemplo de como tiene que ser el procedimiento para poder crear el bloque de datos apartir de dicho procedimiento.

Con el procedimiento posteado casi me sale, la solucion tiene que estar cerca, ya que hasta ahora lo que probaba yo me daba error y con este procedimiento (el de Matanga) ya me deja entrar en el asistente lo que ocurre ahora es que se debe seleccionar una columna para seguir los pasos del asistente y no aparece ninguna (en la imagen muestro el error que da, el cual es porque para continuar se debe elegir una columna, pero no hay ninguna).



Como hago para que aparezcan las columnas?

Saludos y gracias.
  #4 (permalink)  
Antiguo 04/11/2011, 17:58
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 4 meses
Puntos: 85
Respuesta: Crear bloque de datos con procedimiento

Tengo entendido que un data block si permite seleccionar como origen de datos un procedimiento con parámetro de salida sys_refcursor o type y que las columnas disponibles solo aparecen en el caso de los types, pero hasta ahí llego. El compañero jc3000 tiene más experiencia en el tema, tal vez pueda darte una mano.

Saludos
  #5 (permalink)  
Antiguo 07/11/2011, 14:25
Avatar de saunier  
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Crear bloque de datos con procedimiento

Tras muchas mas busquedas ya casi lo tengo o eso creo

Para que aparezcan las columnas he creado un paquete, en unidad de programas del navegador de objetos, darle al + y elegir "especificacion de paquete" darle nombre y despues escribir el siguiente codigo:
Código:
PACKAGE p1 AS
  TYPE p1_nom IS RECORD(    
    name       VARCHAR2(10),
    apel       VARCHAR2(10) );

  TYPE p1_nom_ref IS REF CURSOR RETURN p1_nom;  

  PROCEDURE query_procedure  (resultset IN OUT p1_nom_ref);
END;
Tras esto ir otra vez a unidad de programas, esta vez crear un "cuerpo del paquete" con el codigo:
Código:
PACKAGE BODY p1 AS
  PROCEDURE query_procedure(resultset IN OUT p1_nom_ref)  IS
  BEGIN
    OPEN resultset FOR
      SELECT name,apel from usuarios;
  END query_procedure;
END;
Con esto apareceran en columnas disponibles las columnas que indiques en el "p1_nom", lo que me pasa ahora es que una vez se crea el bloque de datos y voy a probarlo dandole al boton ejecutar consulta me sale el error: FRM-40505: error de oracle: No se ha podido realizar la consulta.

Y no hace falta decir que no se muestra ningun registro.

Cuando estas en el asistente de bloque de datos tras pedirme el procedimiento (p1.query_procedure) y elegir las columnas te va pidiendo varios procedimientos, uno para insertar, otro para actualizar, otro para suprimir y otro para bloquear registros. Aqui os he puesto un ejemplo del primer procedimiento porque tambien lo probe creando dentro del paquete un procedimiento para cada accion y me da tambien el mismo error.

Nadie ha creado nunca un bloque de datos desde un procedimiento??
Os pido una ultima ayudita para conseguir crear el bloque de datos, por favor.

Un saludo a todos y gracias a Matanga que me indico el camino para encontrar esto

Etiquetas: builder, forms, pl-sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.