- 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 !