Để trả lời câu hỏi của bạn về lý do tại sao nó lại chèn null, đó là vì bạn không cung cấp bất kỳ giá trị nào cho các tham số thủ tục khi bạn thực thi nó.
Dựa trên những gì bạn đã nêu trong câu hỏi và nhận xét của bạn ở trên, có vẻ như bạn đang thiếu một số kỹ năng cơ bản khi làm việc với Oracle. Mã bạn đã viết là một thủ tục, không phải là một hàm, vì vậy bạn không thể gọi nó bằng SELECT
bản tường trình. Một thủ tục được gọi bên trong một khối plsql. Thủ tục của bạn như đã viết có hai đối số, mà bạn phải chuyển cho lệnh gọi thủ tục thông qua mã gọi. Mã thủ tục bạn đã viết không tìm kiếm dữ liệu từ XML_HOURS_LOAD
bảng.
Tất cả chúng tôi đều là những người mới học Oracle. Bạn sẽ muốn xem một số hướng dẫn để bắt đầu với các nguyên tắc cơ bản về mã hóa pl / sql để giúp làm rõ sự khác biệt giữa các hàm và các thủ tục được lưu trữ cũng như cách sử dụng các đối số tham số.
Từ những gì bạn đã viết trong câu hỏi của mình, tôi tin rằng đây là mã bạn muốn:
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;