За да отговоря на въпроса ви защо вмъква нули, това е, защото не предоставяте никакви стойности на параметрите на процедурата, когато я изпълнявате.
Въз основа на това, което посочихте във въпроса и вашия коментар по-горе, изглежда, че ви липсват някои основни умения за работа с Oracle. Кодът, който сте написали, е процедура, а не функция, така че не можете да го извикате в SELECT
изявление. Процедура се извиква вътре в plsql блок. Вашата процедура, както е написана, приема два аргумента, които трябва да предадете на извикването на процедурата чрез извикващия код. Процедурният код, който сте написали, не търси данни от XML_HOURS_LOAD
таблица.
Всички сме били новите хора, изучаващи Oracle. Ще искате да разгледате някои уроци, за да започнете с основите на pl/sql кодирането, за да изясните разликите между функциите и съхранените процедури и как да използвате аргументите на параметрите.
От това, което сте написали във въпроса си, смятам, че това е кодът, който искате:
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;