vendredi 30 septembre 2016

Problème lors de la soumission de commandes - Table dual

  • Problème lors de la soumission de commandes :

Message :
po.plsql.PO_VALIDATIONS.VALIDATE_SET.-110 : C_LINE_NUM_UNIQUE Cause : Une erreur SQL s'est produite dans po.plsql.PO_VALIDATIONS.VALIDATE_SET.. L'erreur SQL est ORA-30926: impossible d'obtenir un ensemble de lignes stables dans les tables source. Action : Notez le numéro de cette erreur et les actions que vous essayez d'exécuter. Contactez l'administrateur de votre système pour obtenir de l'aide.

Lorsqu’on suit le chemin du plantage :
po_validations.VALIDATE_SET => PO_VAL_LINES.line_num_unique => PO_VALIDATION_HELPER.child_num_unique,

On arrive à l’instruction qui plante (ORA-30926) :
FORALL i IN 1 .. p_entity_id_tbl.COUNT
MERGE INTO PO_SESSION_GT SES
USING DUAL
ON
(   SES.key = l_data_key
AND SES.index_num2 = p_entity_id_tbl(i)
)
WHEN MATCHED THEN UPDATE SET
  SES.index_num1 = p_parent_id_tbl(i),
    SES.num1 = p_entity_num_tbl(i),
    SES.index_char2 = c_NEW
WHEN NOT MATCHED THEN INSERT
( key
, index_num1
, index_num2
, num1
, index_char2
)
VALUES
( l_data_key
, p_parent_id_tbl(i)
, p_entity_id_tbl(i)
, p_entity_num_tbl(i)
, c_NEW
);

  • L’instruction plante lorsqu’il y a plusieurs lignes dans DUAL.

Solution : enlever les lignes surnuméraires de DUAL

Malgré son nom, la table dual ne doit contenir qu'une seule ligne !

Aucun commentaire: