För att svara på din fråga om varför det sätter in nollor, det beror på att du inte tillhandahåller några värden till procedurparametrarna när du kör det.
Baserat på vad du angav i frågan och din kommentar ovan verkar det som om du saknar några grundläggande färdigheter i att arbeta med Oracle. Koden du skrev är en procedur, inte en funktion, så du kan inte anropa den i en SELECT
påstående. En procedur kallas inuti ett plsql-block. Din procedur som skriven tar två argument, som du måste skicka till proceduranropet via anropskoden. Procedurkoden du skrev söker inte efter data från XML_HOURS_LOAD
bord.
Vi har alla varit den nya personen som lärt oss Oracle. Du kommer att vilja titta på några handledningar för att komma igång med grunderna för pl/sql-kodning för att hjälpa till att reda ut skillnaderna mellan funktioner och lagrade procedurer och hur man använder parameterargument.
Av det du skrev i din fråga tror jag att det här är koden du vill ha:
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;