Monthly Archives: March 2017

Funcions de taula…

Funció de taula

Amb això creem estructures tabulars al vol… que es podem consumir com qualsevol taula…

El “problema” d’això es que tot va a memoria, i no torna resultats fins que ho te tot…

CREATE TYPE t_tf_row AS OBJECT (
id NUMBER,
description VARCHAR2(50)
);

CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;

CREATE OR REPLACE FUNCTION get_tab_tf (p_rows IN NUMBER) RETURN t_tf_tab AS
l_tab t_tf_tab := t_tf_tab();
BEGIN
FOR i IN 1 .. p_rows LOOP
l_tab.extend;
l_tab(l_tab.last) := t_tf_row(i, ‘Description for ‘ || i);
END LOOP;

RETURN l_tab;
END;

select t.*, d.* from table(get_tab_tf(5)) t, dual d;

ID DESCRIPTION DUMMY
1
Description for 1 X
2
Description for 2 X
3
Description for 3 X
4
Description for 4 X
5
Description for 5 X

 

Arbres jerarquics

Pot ser útil per accedir a informació en forma d’arbre…

CREATE TABLE BI_INT.jerarquia
(
ID INTEGER,
REF_ID INTEGER,
NOM VARCHAR2(50)
);

ALTER TABLE BI_INT.jerarquia ADD (
PRIMARY KEY
(ID));

insert into jerarquia values (1,null,’Avi’);

insert into jerarquia values (2,1,’Pare1′);

insert into jerarquia values (3,1,’Pare2′);

insert into jerarquia values (4,2,’Fill1′);

insert into jerarquia values (5,2,’Fill3′);

insert into jerarquia values (6,3,’Fill2′);

insert into jerarquia values (7,3,’Fill4′);

insert into jerarquia values (8,4,’Net1′);

insert into jerarquia values (9,7,’Net2′);

commit;

select * from jerarquia;

SELECT nom, id, ref_id, LEVEL, SYS_CONNECT_BY_PATH(nom, ‘/’) as Arbre
FROM jerarquia
–where level < 3
START WITH id = 1
CONNECT BY PRIOR id = ref_id
ORDER SIBLINGS BY nom;

——

NOM ID REF_ID LEVEL ARBRE
Avi
1
1
/Avi
Pare1
2
1
2
/Avi/Pare1
Fill1
4
2
3
/Avi/Pare1/Fill1
Net1
8
4
4
/Avi/Pare1/Fill1/Net1
Fill3
5
2
3
/Avi/Pare1/Fill3
Pare2
3
1
2
/Avi/Pare2
Fill2
6
3
3
/Avi/Pare2/Fill2
Fill4
7
3
3
/Avi/Pare2/Fill4
Net2
9
7
4
/Avi/Pare2/Fill4/Net2