Funcţii recursive in T-SQL
Pentru a vedea cum se utilizează funcţiile recursive în T-SQL vom lua următorul exemplu:
Acest tabel conţine o ierarhie între elemente de acelasi tip (datele pot fi extrase sub forma unui arbore).
Problema este cum să determinăm care sunt "ramurile" acestui
arbore precum şi subramurile acestor ramuri.
Pentru aceasta vom utiliza funţii recursive.
Funcţia recursivă utilizată pentru obţinerea ramurilor (elementelor)
subordonate unui element oarecare este:
CREATE FUNCTION
GetElementChilds
(
@ElementID
INT)
RETURNS
@result
TABLE
(
[ID]
INT
, ElementName
CHAR
(
50
)
, SuperiorElementID
INT)
AS
BEGIN
DECLARE
@r
INT
DECLARE
@i
INT
DECLARE
@id
INT
DECLARE
@tbl_temp
TABLE
(
i
INT
identity, [ID]
INT
, ElementName
CHAR
(
50
)
, SuperiorElementID
INT
)
SET
@i = 1
INSERT INTO
@tbl_temp
SELECT
[ID],
ElementName, SuperiorElementID
FROM
Hierarchy
SET
@r =
@@ROWCOUNT
WHILE
(
@i < = @r
)
BEGIN
SELECT
@id = [ID]
FROM
@tbl_temp
WHERE
i = @i
INSERT INTO
@result
SELECT
[ID], ElementName, SuperiorElementID
FROM
@tbl_temp
WHERE
[ID] = @id
AND
SuperiorElementID = @ElementID
IF
@@ROWCOUNT
> 0
BEGIN
INSERT INTO
@result
SELECT * FROM
GetElementChilds
(
@id
)
END
SET
@i = @i + 1
END
RETURN
END
Utilizare:
SELECT
*
FROM
GetElementChilds
(
1
)
| ID | ElementName | SuperiorElementID |
| 2 | Level 2 - Element 2.1 (child of 1) | 1 |
| 5 | Level 3 - Element 3.1 (child of 2) | 2 |
| 6 | Level 3 - Element 3.2 (child of 2) | 2 |
| 7 | Level 3 - Element 3.3 (child of 2) | 2 |
| 3 | Level 2 - Element 2.2 (child of 1) | 1 |
| 8 | Level 3 - Element 3.4 (child of 3) | 3 |
| 4 | Level 2 - Element 2.3 (child of 1) | 1 |
Pentru a vedea toate ramurile arborelui se va utiliza:
SELECT * FROM
GetElementChilds
(NULL)
Notă importantă: numărul maxim de recurenţe permise este de 32!
techit.ro
Colecţia: Exemple de cod
Articolul precedent: Exemplu de utilizare a unui trigger în T-SQL
Articolul următor: Exemplu de utilizare a unei funcţii recursive şi a unui cursor în T-SQL
Spune-ti parerea despre acest articol!
|
|
|
Colecţiile techIT.ro
Căutare după tag:
Topul celor mai citite articole
Spune-ti parerea despre acest articol!