Chcete-li odpovědět na vaši otázku, proč vkládá hodnoty null, je to proto, že nezadáváte žádné hodnoty parametrům procedury, když ji spouštíte.
Na základě toho, co jste uvedli v otázce a vašem komentáři výše, se zdá, že vám chybí některé základní dovednosti při práci s Oracle. Kód, který jste napsali, je procedura, nikoli funkce, takže jej nemůžete volat v SELECT
tvrzení. Uvnitř bloku plsql se volá procedura. Vaše procedura tak, jak je napsána, má dva argumenty, které musíte předat volání procedury prostřednictvím volajícího kódu. Kód procedury, který jste napsali, nehledá data z XML_HOURS_LOAD
tabulka.
Všichni jsme byli novým člověkem, který se učí Oracle. Budete se chtít podívat na několik výukových programů, které vám pomohou začít se základy kódování pl/sql, které vám pomohou objasnit rozdíly mezi funkcemi a uloženými procedurami a jak používat argumenty parametrů.
Z toho, co jste napsali ve své otázce, se domnívám, že toto je kód, který chcete:
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;