Bonjour a tous,
J'essaie de modifier une requête sql écrite pour une bdd MySQL, en une requête pour bdd DB2.
Mais j'ai beaucoup de soucis.
J'ai été obligé de séparer cette méthode en 2 parties (fonction et procédure).
Code Java :
String.format(
"CREATE FUNCTION NX_IN_TREE(id %s, baseid %<s) "
+ "RETURNS BOOLEAN " //
+ "LANGUAGE SQL " //
+ "READS SQL DATA " //
+ "BEGIN" //
+ " DECLARE curid %<s DEFAULT id;" //
+ " IF baseid IS NULL OR id IS NULL OR baseid = id THEN" //
+ " RETURN FALSE;" //
+ " END IF;" //
+ " LOOP" //
+ " SELECT parentid INTO curid FROM hierarchy WHERE hierarchy.id = curid;" //
+ " IF curid IS NULL THEN" //
+ " RETURN FALSE; " //
+ " ELSEIF curid = baseid THEN" //
+ " RETURN TRUE;" //
+ " END IF;" //
+ " END LOOP;" //
+ "END" //
, idType)))
Et le code que j'ai commencé a écrire pour db2
Code Java :
statements.ADD(new ConditionalStatement(true, BOOLEAN.FALSE, NULL,
NULL,
"CREATE PROCEDURE NX_IN_TREE2(OUT n INTEGER) "
+ " READS SQL DATA "
+ " BEGIN"
+ " DECLARE CURID CURSOR FOR SELECT PARENTID FROM HIERARCHY WHERE HIERARCHY.ID = '1';"
+ " SET n = 1;"
+ " END"));
statements.ADD(new ConditionalStatement(true, BOOLEAN.FALSE, NULL,
NULL,
"CREATE FUNCTION NX_IN_TREE() "
+ " RETURNS INTEGER "
+ " BEGIN ATOMIC "
+ " DECLARE n INTEGER DEFAULT 1; "
+ " CALL NX_IN_TREE2(n); "
+ " RETURN n;"
+ " END" ));
Je n'arrive cependant pas a utiliser le curseur dans ma requête et a retourner les valeurs correctement.
Merci d'avance