Per rispondere alla tua domanda sul motivo per cui sta inserendo valori null, è perché non stai fornendo alcun valore ai parametri della procedura quando lo esegui.
Sulla base di ciò che hai affermato nella domanda e del tuo commento sopra, sembra che ti manchino alcune abilità fondamentali nel lavorare con Oracle. Il codice che hai scritto è una procedura, non una funzione, quindi non puoi chiamarla in un SELECT
dichiarazione. Una procedura viene chiamata all'interno di un blocco plsql. La tua procedura come è stata scritta accetta due argomenti, che devi passare alla chiamata della procedura tramite il codice chiamante. Il codice della procedura che hai scritto non cerca i dati da XML_HOURS_LOAD
tabella.
Siamo stati tutti la nuova persona che ha imparato Oracle. Ti consigliamo di guardare alcuni tutorial per iniziare sui fondamenti della codifica pl/sql per chiarire le differenze tra funzioni e procedure memorizzate e come utilizzare gli argomenti dei parametri.
Da quello che hai scritto nella tua domanda, credo che questo sia il codice che desideri:
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;