Oracle
 sql >> Database >  >> RDS >> Oracle

Perché questa stored procedure inserisce valori NULL nella tabella?

Per rispondere alla tua domanda sul motivo per cui sta inserendo valori null, è perché non stai fornendo alcun valore ai parametri della procedura quando lo esegui.

Sulla base di ciò che hai affermato nella domanda e del tuo commento sopra, sembra che ti manchino alcune abilità fondamentali nel lavorare con Oracle. Il codice che hai scritto è una procedura, non una funzione, quindi non puoi chiamarla in un SELECT dichiarazione. Una procedura viene chiamata all'interno di un blocco plsql. La tua procedura come è stata scritta accetta due argomenti, che devi passare alla chiamata della procedura tramite il codice chiamante. Il codice della procedura che hai scritto non cerca i dati da XML_HOURS_LOAD tabella.

Siamo stati tutti la nuova persona che ha imparato Oracle. Ti consigliamo di guardare alcuni tutorial per iniziare sui fondamenti della codifica pl/sql per chiarire le differenze tra funzioni e procedure memorizzate e come utilizzare gli argomenti dei parametri.

Da quello che hai scritto nella tua domanda, credo che questo sia il codice che desideri:

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;