Page 1 sur 1

Soucis appel Procédure Stockée OMNIFIND via une FUNCTION

Posté : mer. 13 mai 2020, 07:18:19
par ESTEVES
Bonjour,

j'essaie vainement depuis quelques jours d'appeler une Procédure stockée OMNIFIND depuis une Fonction SQL afin de récupérer les éléments . Pourquoi faire cela ? Certains des éléments récupérés sont en XML et quand on exécute cette PS par idb-connector en Node il ne récupère rien dans ces zones de retour XML (Forcement idb-connector utilise le XML dans sa propre gestion),ce que j'aimerais c'est faire un traitement en sortie dans la fonction pour ne récupérer que les valeurs que j'ai besoin pour ces zones.

voici la PS OMNIFIND que je veux lancer.

Code : Tout sélectionner

CALL OMNI_COL.SEARCH('puissance','RESULTLIMIT=5')
cela marche finement

j'ai voulu appeler cette PS depuis une Fonction (sachant que la PS Omnifind renvoi un resultset)

Code : Tout sélectionner

CREATE or REPLACE FUNCTION EURO4.W_OMF_SRCH(
  pSearch VARCHAR(200), pLimit varchar(1)
)
RETURNS TABLE (
    OBJECTINFOR VARCHAR(128),
    SC VARCHAR(128)
)
READS SQL DATA
BEGIN 
DECLARE has_rows INT DEFAULT 1;
DECLARE schema_name VARCHAR(128);
DECLARE table_name VARCHAR(128);
DECLARE wOBJTYPE VARCHAR(128);
DECLARE wOBJATTR VARCHAR(128);
DECLARE wCONTAINING_OBJECT_LIB VARCHAR(128);
DECLARE wCONTAINING_OBJECT_NAME VARCHAR(128);
DECLARE wOBJECTINFOR VARCHAR(128);
DECLARE wMODIFY_TIME VARCHAR(128);
DECLARE wSC VARCHAR(128);

DECLARE res1 RESULT_SET_LOCATOR VARYING;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET has_rows = 0;
CALL OMNI_COL.SEARCH('moteur','RESULTLIMIT=5');
ASSOCIATE RESULT SET LOCATORS (res1) WITH PROCEDURE OMNI_COL.SEARCH;
ALLOCATE cur1 CURSOR FOR RESULT SET res1;
FETCH cur1 INTO wOBJTYPE, wOBJATTR, wCONTAINING_OBJECT_LIB, wCONTAINING_OBJECT_NAME, wOBJECTINFOR, wMODIFY_TIME, wSC;
WHILE has_rows > 0 DO 
        PIPE (LOWER(wOBJECTINFOR), LOWER(wSC)); 
    FETCH cur1 INTO wOBJTYPE, wOBJATTR, wCONTAINING_OBJECT_LIB, wCONTAINING_OBJECT_NAME, wOBJECTINFOR, wMODIFY_TIME, wSC;
END WHILE;
RETURN;
END
Pas de souci pour la création mais quand je lance la PS (pour info je ne gère pas pour l'instant les paramètres d'entrées :D )

j'ai cette erreur

Etat SQL : 38H14 Code fournisseur : -20427 Message : [SQ20427] Erreur lors de la procédure administrative de recherche de texte. Cause . . . . . :   Une erreur s'est produite pendant une procédure administrative de recherche de texte. Code raison : 700. Le texte renvoyé est : Cause . . . . . :   DB2 error: 20463 Ensembles de résultats non retournés car la procédure a été appelée par une fonction ou par un déclencheur.. File /QSYS.LIB/QTEMP.LIB/TEMPFILE.FILE/QDBTSCOLSR.MBR:649. Que faire . . . :   Remédiez à l'incident indiqué par le code raison et réexécutez la procédure administrative.

Si quelqu'un à une solution je suis preneur :D

Re: Soucis appel Procédure Stockée OMNIFIND via une FUNCTION

Posté : mer. 13 mai 2020, 07:45:28
par cmasse
ET en utilisant SYSTS_SEARCH_RETURN_TO_CALLER() ?

https://www.ibm.com/support/pages/node/1116483

Re: Soucis appel Procédure Stockée OMNIFIND via une FUNCTION

Posté : dim. 03 janv. 2021, 08:10:11
par ESTEVES
cmasse a écrit :
mer. 13 mai 2020, 07:45:28
ET en utilisant SYSTS_SEARCH_RETURN_TO_CALLER() ?

https://www.ibm.com/support/pages/node/1116483
Merci Christian cela fonctionne , désolé de répondre aussi tard mais j'avais mis cela un peu de côté :D :D