Buen día estimada comunidad, hoy estoy teniendo una duda para resolver una validación que me pidieron.
El punto es que tengo en las líneas del pedido de compras (POR1) el campo “ItemCode” y el campo “Project”, necesito validar que la combinación de esos 2 campos sea única y mostrar un mensaje de error si ya existe en la base de datos o si se repite en el documento.
El campo “ItemCode” puede repetirse N cantidad de veces y el campo “Project” también, pero la combinación de ambos debe ser única.
He pensado resolverlo con un cursor pero no se si sea lo más óptimo para el performance de la base, espero puedan ayudarme,
Saludos y gracias.
Para quienes les interese, lo resolví de la siguiente manera:
IF :object_type='22' and (:transaction_type= 'A' or :transaction_type= 'U' ) then
Chk:=0;
contador:=0;
SELECT COUNT(*) INTO Chk FROM POR1 T1
WHERE T1."DocEntry"=:list_of_cols_val_tab_del AND
T1."Project" IN
(SELECT T2."Project" FROM OPOR T5 INNER JOIN POR1 T2 ON T2."DocEntry" = T5."DocEntry"
WHERE T5."CANCELED" = 'N' AND T1."ItemCode" = T2."ItemCode" AND T1."LineNum" <> T2."LineNum");
SELECT COUNT(*) INTO contador FROM POR1 T1
WHERE T1."DocEntry"=:list_of_cols_val_tab_del AND
T1."Project" IN
(SELECT T2."Project" FROM OPOR T5 INNER JOIN POR1 T2 ON T2."DocEntry" = T5."DocEntry"
WHERE T5."CANCELED" = 'N' AND T1."ItemCode" = T2."ItemCode" AND T2."DocEntry" <> :list_of_cols_val_tab_del);
IF (:contador > 0) THEN
error :='1005';
error_message :='TN1005 - La combinación de Artículo + Pedido de Embarque ya existe en otro pedido. ' || :contador;
ELSEIF (:Chk > 0) THEN
error :='1005';
error_message :='TN1005 - Existen combinaciones repetidas de Artículo + Pedido de Embarque en este pedido. ' || :Chk;
END IF;
END IF;
Espero pueda ser de ayuda para alguien más.
Saludos.
2 Me gusta