Oracle - DUDAS CONSULTAS PL/SQL

 
Vista:
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por paco (4 intervenciones) el 07/01/2021 17:33:47
Buenas estoy empezando a trabajar con los objetos y tengo algunas dudas que quizá me podáis solucionar ^^
- Tego realizado los tipos y tablas de una BDOR en la que tenemos unas pistas deportivas, polideportivos usuarios y reservas.
-Cada polideportivo tiene varias pistas
Esto seria lo que tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
CREATE OR REPLACE TYPE usuarios AS OBJECT(
    nombre VARCHAR2(20),
    apellidos VARCHAR2(20),
    email VARCHAR2 (25),
    telefono NUMBER,
    codigo_usua VARCHAR2(20)
);
 
CREATE OR REPLACE TYPE pista AS OBJECT(
    codigo_pista VARCHAR2 (20),
    tipo VARCHAR2 (15),
    Disponibilidad VARCHAR2(20),
    precio NUMBER
);
 
CREATE TABLE tablausuario of usuarios(
    codigo_usua primary key
);
INSERT INTO tablausuario VALUES('luis', 'gomez sanchez', 'luis@gmail.com', '649820474', '14012p');
 
INSERT INTO tablausuario VALUES('paco', 'perez gonzalez', 'paco@gmail.com', '645832174', '14792p');
 
INSERT INTO tablausuario VALUES('carlos', 'sanz sanchez', 'carlitos@gmail.com', '686049474', '90462d');
 
CREATE TABLE tablapista of pista(
    codigo_pista primary key
);
 
INSERT INTO tablapista VALUES('4569u', 'futbol', 'si', 13);
 
INSERT INTO tablapista VALUES('1428h', 'padel', 'si', 8);
 
INSERT INTO tablapista VALUES('2354A', 'tenis', 'si', 10);
 
INSERT INTO tablapista VALUES('1429h', 'ping pong', 'si', 5);
 
CREATE OR REPLACE TYPE polideportivos AS OBJECT (
    nombre VARCHAR2(20),
    direccion VARCHAR2(30),
    Extension NUMBER,
    codigo_polide VARCHAR2(20),
    pistas REF pista
);
CREATE TABLE tablapolideportivo of polideportivos(
    codigo_polide primary key,
    pistas references tablapista
 );
 
 
INSERT INTO tablapolideportivo VALUES ('Virgen Reina', 'calle falsa', 2000, '12345F',
    (SELECT REF(TP) FROM tablapista TP where TP.codigo_pista='4569u')
    );
 
INSERT INTO tablapolideportivo VALUES('Rafa nadal', 'calle asturias', 3500, '2547A',
    (SELECT REF(TP) FROM tablapista TP where TP.codigo_pista='2354A')
    );
 
INSERT INTO tablapolideportivo VALUES('palacio princesa', 'calle troncal', 4000, '97463A',
    (SELECT REF(TP) FROM tablapista TP WHERE TP.codigo_pista='1429h')
    );
 
CREATE TABLE reserva(
    Fecha_reserva DATE,
    fecha_uso DATE,
    usuarios references tablausuario,
    pista references tablapista
);
 
INSERT INTO reserva VALUES('15/11/2019', '20/11/2019',
    (SELECT REF(U) FROM tablausuario U where u.codigo_usua='14012p'),
    (SELECT REF(TP) FROM tablapista TP WHERE TP.codigo_pista='1429h')
    );


Simplemente seria una actividad de prueba no un caso real solo para entender conceptos.
Mi primer problema es que el ultimo INSERT INTO no me inserta el dato me sale un error de "inconsistent datatypes: expected %s got %s". El resto de datos no tube ningun problema.

Aparte como podria consultar las reservas de un usuario o las reservas en un mes?
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
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por anonymous (15 intervenciones) el 07/01/2021 18:12:27
Tienes que darle un formato a la fecha, pruébalo así:


To_Char('15/11/2019', 'DD/MM/YYYY')
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
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por paco (4 intervenciones) el 07/01/2021 18:16:33
El error de insertar dato lo solucione agregando un type de reserva y creando tabla de este.
También me di cuenta que no os pase el script para la consulta que plantee de reservas de un usuario.

1
2
3
SELECT DEREF(tablareserva).codigo_reserva
FROM tablaRESERVAs
WHERE DEREF(tablausuarios).codigo_usuario='14012p';

La del mes nose si sera con un EXTRACT MONTH OF o nose eso si estoy mas perdido =(
Gracias a todos
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
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por anonymous (15 intervenciones) el 07/01/2021 18:22:02
Si lo del mes es como lo planeas

1
EXTRACT(month FROM TuTable)
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
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por paco (4 intervenciones) el 07/01/2021 19:36:38
Y como seria las consultas correctamente porque no acabo de desarrollarla correctamente. Nose si x error de comprension o simplemente error al redactar codigo.
Paso un par de intentos de ambas que hice;

1
2
3
4
5
6
7
8
9
10
11
SELECT DEREF(tablareservas.usuario).codigo_reserva
FROM tablareservas
WHERE DEREF(usuarios).codigo_usua='14012p';
 
 
SELECT *
FROM tablareservas t
WHERE DEREF(t.usuario.codigo_usua)='14012p';
 
SELECT * FROM TABLARESERVAS T
WHERE DEREF(T.FECHA_USO)= ;
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
sin imagen de perfil

DUDAS CONSULTAS PL/SQL

Publicado por paco (4 intervenciones) el 07/01/2021 20:24:13
Después de una pausa y revisar descubrí el fallo y la consulta del usuario ya la tengo solucionada =)

1
2
3
SELECT DEREF (t.usuario).nombre,t.fecha_uso
FROM tablareservas t
WHERE DEREF (t.usuario).codigo_usua='90462d';

En cuanto funciono vi que no devolvía nada y era que tenia puesto código de pista en vez del usuario T.T

Seguire pegandome con lo del mes y atento al foro ^^
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