Bonjour,

Dans ON-ERROR, comment faire un go_block suivit execute_query.

Je possède un écran Master-detail

Sur le block detail une clause order by est défini dans la priopriété ORDER BY du block.
La propriété ORDER_BY fait référence à une fonction qui retourne une valeur.
Deux paramètres sont fournit à cette fonction, l'ID du block maitre et l'id du block detail.

Plutot que de tester la fonction recevant les 2 id comme paramètres.
On me de mande de catcher l'erreur FRM-40505 Unable to perform query.
Si l'erreur survient je dois relancer la requete du block detail avec la clause order by à NULL.

Dans tout les autres cas la clause ORDER BY doit référencer la fonction.

J'ai surchargé l'event ON-ERROR dans le block detail comme ceci. Cependant GO_BLOCK et EXECUTE_QUERY ne fonctionne pas dans le ON-ERROR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
DECLARE
  v_error NUMBER      := ERROR_CODE;
  v_type VARCHAR2(3)  := ERROR_TYPE;
  v_text VARCHAR2(80) := ERROR_TEXT;
BEGIN
  IF v_type = 'FRM' AND v_error = 40505 THEN
      CANCEL_QUERY;
    SET_BLOCK_PROPERTY('TRA', ORDER_BY, '');
    GO_BLOCK('TRA');
    EXECUTE_QUERY;
  ELSE
    Message(v_type||'-'||to_char(v_error)||': '||v_text);
    RAISE Form_Trigger_Failure;
  END IF;
END;
Merci