Aby odpowiedzieć na pytanie, dlaczego wstawia wartości null, oznacza to, że nie podajesz żadnych wartości parametrów procedury podczas jej wykonywania.
W oparciu o to, co napisałeś w pytaniu i Twój komentarz powyżej, wydaje się, że brakuje Ci podstawowych umiejętności w pracy z Oracle. Napisany przez Ciebie kod jest procedurą, a nie funkcją, więc nie możesz wywołać go w SELECT
oświadczenie. Procedura jest wywoływana wewnątrz bloku plsql. Twoja procedura w formie pisemnej wymaga dwóch argumentów, które musisz przekazać do wywołania procedury za pomocą kodu wywołującego. Napisany przez Ciebie kod procedury nie szuka danych z XML_HOURS_LOAD
tabeli.
Wszyscy byliśmy nową osobą uczącą się Oracle. Będziesz chciał zajrzeć do kilku samouczków, aby rozpocząć naukę podstaw kodowania pl/sql, aby pomóc wyjaśnić różnice między funkcjami i procedurami składowanymi oraz jak używać argumentów parametrów.
Z tego, co napisałeś w swoim pytaniu, uważam, że jest to kod, którego potrzebujesz:
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;