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

[SOLUCIONADO] [DUDA] ¿Como sacar un dato de un cursor sin pl/sql?

Estas en el tema de [DUDA] ¿Como sacar un dato de un cursor sin pl/sql? en el foro de Oracle en Foros del Web. Hola [email protected] Creando objetos y referencias en oracle me ha surgido una pequeña duda. Primero os mostraré mi escenario para que os hagáis una idea. ...
  #1 (permalink)  
Antiguo 11/06/2015, 06:09
Avatar de Apolo_13  
Fecha de Ingreso: mayo-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 4
[DUDA] ¿Como sacar un dato de un cursor sin pl/sql?

Hola [email protected]

Creando objetos y referencias en oracle me ha surgido una pequeña duda.

Primero os mostraré mi escenario para que os hagáis una idea.


Código SQL:
Ver original
  1. CREATE OR REPLACE TYPE TipoUsuario AS object (
  2.   usuario varchar2(20),
  3.   fechaAlta DATE
  4. );

Código SQL:
Ver original
  1. CREATE OR REPLACE TYPE TipoTabla AS object (
  2.   tabla varchar2(40),
  3.   tamanio NUMBER(8,2),
  4.   usuario REF TipoUsuario
  5. );

Código SQL:
Ver original
  1. CREATE OR REPLACE TYPE tabla_anidada AS TABLE OF TipoTabla;

Código SQL:
Ver original
  1. CREATE OR REPLACE TYPE TipoTablespace AS object (
  2.   tablespace varchar2(40),
  3.   tablas tabla_anidada,
  4.   member FUNCTION ObtenerTamanio RETURN NUMBER,
  5.   pragma restrict_references(ObtenerTamanio,WNDS)
  6. );

La función del tipo "TipoTablespace" esta declarada correctamente. Aparte que no tiene nada que ver con mi duda.


Bueno...la pregunta es la siguiente. A traves de un simple "SELECT" estoy intentado sacar los datos del cursor de forma individual, pero no encuentro la manera. No puedo utilizar pl/sql.

este es mi select. Y tiene que ser asi, porque para el tablespace de pepe quiero sacar un usuario en concreto de las tablas que tiene el tablespace.

Código SQL:
Ver original
  1. SELECT cursor(SELECT deref(tbs.usuario) FROM TABLE(ts.tablas) tbs)
  2. FROM tablespaces ts WHERE ts.tablespace = 'pepe'
¿alguien sabría sacar un dato en concreto del cursor que tiene esta select sin pl/slq?

La consulta funciona perfectamente, pero como es logico me muestra todos los datos del cursor, y yo solo quiero uno condicionándolo con un where.

Un saludo y gracias de antemano ;)
__________________
¿Buscas respuestas? eemmmmm.....¡Abstrae tu mente!

Última edición por gnzsoloyo; 12/06/2015 a las 14:39
  #2 (permalink)  
Antiguo 11/06/2015, 10:29
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 11 años, 7 meses
Puntos: 85
Respuesta: [DUDA] ¿Como sacar un dato de un cursor sin pl/sql?

Interpretando a simple vista el código parece que estas buscando información sobre las tablas, su tamaño, el propietario y el tablespace, si es así, mi pregunta es ¿para que la complicación de crear tipos y tablas anidadas?, todo esto lo podes obtener con una simple consulta haciendo joins de 3 o 4 vistas del diccionario y filtrando por el concepto que quieras.

En cuanto a tu pregunta, una vez obtenido el cursor (o tabla anidada) no se puede filtrar desde la consulta principal, el cursor entero debe ser pasado hacia un objeto superior (sea en java, c#, pl/sql) para poder ser leído.

Saludos
  #3 (permalink)  
Antiguo 12/06/2015, 13:26
Avatar de Apolo_13  
Fecha de Ingreso: mayo-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 4
Respuesta: [DUDA] ¿Como sacar un dato de un cursor sin pl/sql?

aveces me complico demasiado jajaja.

vale, muchas gracias por tu respuesta ;)
__________________
¿Buscas respuestas? eemmmmm.....¡Abstrae tu mente!
  #4 (permalink)  
Antiguo 12/06/2015, 14:07
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 4 años, 4 meses
Puntos: 1
Respuesta: [DUDA] ¿Como sacar un dato de un cursor sin pl/sql?

es la primera vez que veo algo como esto XD.

Bueno toca investigar se ve interesante crear tablas anidadas, pero mi duda es ... cual sería su uso??

Etiquetas: cursor, dato, sql, table
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 02:58.