sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué este procedimiento almacenado inserta valores NULL en la tabla?

Para responder a su pregunta de por qué está insertando nulos, es porque no está proporcionando ningún valor a los parámetros del procedimiento cuando lo ejecuta.

Según lo que indicó en la pregunta y su comentario anterior, parece que le faltan algunas habilidades fundamentales para trabajar con Oracle. El código que escribió es un procedimiento, no una función, por lo que no puede llamarlo en un SELECT declaración. Se llama a un procedimiento dentro de un bloque plsql. Su procedimiento, tal como está escrito, toma dos argumentos, que debe pasar a la llamada del procedimiento a través del código de llamada. El código de procedimiento que escribió no busca datos del XML_HOURS_LOAD mesa.

Todos hemos sido la persona nueva aprendiendo Oracle. Querrá ver algunos tutoriales para comenzar con los fundamentos de la codificación pl/sql para ayudar a aclarar las diferencias entre funciones y procedimientos almacenados y cómo usar argumentos de parámetros.

Por lo que escribió en su pregunta, creo que este es el código que desea:

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;