PostgreSQL - Ayuda con limite de longuitud

 
Vista:
Imágen de perfil de Luis Pablo
Val: 11
Ha aumentado su posición en 15 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ayuda con limite de longuitud

Publicado por Luis Pablo (4 intervenciones) el 22/06/2021 19:02:17
Hola muy buenas! necesito ayuda que he investigado por muchos lados pero no encuentro nada, estoy haciendo una tarea y me piden estas tablas:

///////////////////////////////////////////////////////////////////////////////////

1
2
3
4
5
6
7
8
9
10
11
12
13
Tabla Cliente
 
Id_Cliente (Llave primaria)
 
 Nombre_Cliente
 
Ap_Pat_Cliente
 
Ap_Mat_Cliente
 
Ciudad_Cliente
 
Codigo_postal (Que sean números del 0 al 9 y que su longitud sea de 5)(Crear un índice)



1
2
3
4
5
6
7
8
9
10
11
Tabla Videojuego
 
Id_Videojuego (Que sean números del 0 al 9 con una longitud de 7) (Llave primaria)
 
Tipo_Videojuego (Crear índice)
 
Nombre_Videojuego
 
Precio_Videojuego  (Sus pecios serán entre 250  a 600)
 
Consola_Videojuegos

///////////////////////////////////////////////////////////////////////////////////

Mi problema está con las columnas de Codigo_postal e Id_Videojuego, no entiendo cómo ponerle una restricción para que sólo me deje introducirle datos con esas características de sólo números y con longuitud predeterminada... Espero su ayuda amigos.
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
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ayuda con limite de longuitud

Publicado por Francisco (110 intervenciones) el 23/06/2021 20:52:47
Hola

Con un trigger puedes lograr los que indicas

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
DROP FUNCTION IF EXISTS valida_videojuego CASCADE;
CREATE OR REPLACE FUNCTION valida_videojuego()
RETURNS TRIGGER
AS
$BODY$
DECLARE
  es_numerico boolean;
BEGIN
  -- La cadena debe contener solo numeros
  -- ************************************
  SELECT TRIM(NEW.id_videojuego) ~ '^([0-9]*)$' INTO es_numerico;
 
  IF NOT es_numerico THEN
    RAISE EXCEPTION '% -> %', 'ERROR: CARACTER INVALIDO EN LA CLAVE', TRIM(NEW.id_videojuego);
  END IF;
 
  -- La cadena es demasiada larga
  -- Si la columna es tipo char(7) o VARCHAR(7)
  -- PG valida antes de llegar aqui con un state 22001
  -- *************************************************
  IF NOT LENGTH(TRIM(NEW.id_videojuego)) <= 7 THEN
    RAISE EXCEPTION '% -> %', 'ERROR: CLAVE DEMASIADO LARGA', TRIM(NEW.id_videojuego);
  END IF;
 
  RETURN  NEW;
END;
$BODY$
LANGUAGE plpgsql;
 
CREATE TRIGGER tg_valida_videojuego
BEFORE INSERT OR UPDATE ON videojuego
FOR EACH ROW
EXECUTE PROCEDURE valida_videojuego();
 
 
-- INSERT INTO videojuego(id_videojuego) VALUES ('11AZ1');
-- INSERT INTO videojuego(id_videojuego) VALUES ('BB111');
INSERT INTO videojuego(id_videojuego) VALUES ('111111');
INSERT INTO videojuego(id_videojuego) VALUES ('2222222');
--INSERT INTO videojuego(id_videojuego) VALUES ('33333333');
INSERT INTO videojuego(id_videojuego) VALUES ('34');
 
SELECT * FROM videojuego
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Luis Pablo
Val: 11
Ha aumentado su posición en 15 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ayuda con limite de longuitud

Publicado por Luis Pablo (4 intervenciones) el 24/06/2021 22:48:46
Que buena! amigo muchísimas gracias por su ayuda, no lo había pensado así... me has salvado jajaja
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