Pour répondre à votre question de savoir pourquoi il insère des valeurs nulles, c'est parce que vous ne fournissez aucune valeur aux paramètres de la procédure lorsque vous l'exécutez.
D'après ce que vous avez déclaré dans la question et votre commentaire ci-dessus, il semble que vous manquiez de certaines compétences fondamentales pour travailler avec Oracle. Le code que vous avez écrit est une procédure, pas une fonction, vous ne pouvez donc pas l'appeler dans un SELECT
déclaration. Une procédure est appelée à l'intérieur d'un bloc plsql. Votre procédure telle qu'elle est écrite prend deux arguments, que vous devez passer à l'appel de procédure via le code appelant. Le code de procédure que vous avez écrit ne recherche pas les données du XML_HOURS_LOAD
tableau.
Nous avons tous été la nouvelle personne à apprendre Oracle. Vous aurez envie de regarder quelques tutoriels pour vous familiariser avec les principes fondamentaux du codage pl/sql pour vous aider à clarifier les différences entre les fonctions et les procédures stockées et comment utiliser les arguments de paramètre.
D'après ce que vous avez écrit dans votre question, je pense que c'est le code que vous voulez :
DECLARE
p_code IS XML_HOURS_LOAD.code%TYPE,
p_product IS XML_HOURS_LOAD.product%TYPE;
CURSOR cXmlHoursLoadCursor IS (SELECT code, product FROM xml_hours_load); --You can add a WHERE condition to this cursor query
BEGIN
FOR v IN cXmlHoursLoadCursor LOOP
Cascade_Load(v.code, v.product);
COMMIT; --I recommend calling commit here instead of inside your stored procedure so that the calling code has control of the transaction state
END LOOP;
END;