SQL bucle - subconsultas
Publicado por Alex (5 intervenciones) el 02/12/2019 14:08:13
Hola,
estoy bloqueado con un ejercicio de SQL, el problema es el siguiente, tengo unos datos con datos de materiales y datos de materiales padre. Tengo que obtener dado un código de material, el código padre del mayor nivel (es decir, si el material padre de ese primer nivel tiene otro material padre, sería ese segundo material padre el que hay que reportar). He probado con el siguiente código, pero no consigo que el bucle, una vez encuentra el primer material padre, entre con ese resultado a hacer una nueva búsqueda. Creo que el problema es que no estoy aplicando correctamente la estructura del bucle.
si me podéis ayudar, muchas gracias.
estoy bloqueado con un ejercicio de SQL, el problema es el siguiente, tengo unos datos con datos de materiales y datos de materiales padre. Tengo que obtener dado un código de material, el código padre del mayor nivel (es decir, si el material padre de ese primer nivel tiene otro material padre, sería ese segundo material padre el que hay que reportar). He probado con el siguiente código, pero no consigo que el bucle, una vez encuentra el primer material padre, entre con ese resultado a hacer una nueva búsqueda. Creo que el problema es que no estoy aplicando correctamente la estructura del bucle.
si me podéis ayudar, muchas gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE FUNCTION material_highest_parent(codigo_material tb_material.material_code%type)
RETURNS VARCHAR(15) AS $$
DECLARE
parent_material tb_material.material_code%type;
variable tb_material.material_code%type;
variable2 tb_material.material_code%type;
BEGIN
IF NOT EXISTS (SELECT material_code FROM tb_material WHERE material_code=codigo_material) THEN
RAISE EXCEPTION
'El material % no existe', codigo_material;
ELSE
variable=codigo_material;
FOR parent_material IN SELECT parent_material_code FROM tb_material
WHERE material_code=variable LOOP
IF parent_material IS NULL THEN
EXIT;
ELSIF parent_material IS NOT NULL THEN
variable=parent_material;
END IF;
END LOOP;
END IF;
RETURN variable;
END;
$$ LANGUAGE plpgsql;
Valora esta pregunta


0