Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum fügt diese gespeicherte Prozedur NULL-Werte in die Tabelle ein?

Um Ihre Frage zu beantworten, warum es Nullen einfügt, liegt das daran, dass Sie den Prozedurparametern bei der Ausführung keine Werte zur Verfügung stellen.

Basierend auf dem, was Sie in der Frage und Ihrem Kommentar oben angegeben haben, scheinen Ihnen einige grundlegende Fähigkeiten bei der Arbeit mit Oracle zu fehlen. Der von Ihnen geschriebene Code ist eine Prozedur, keine Funktion, daher können Sie ihn nicht in einem SELECT aufrufen Aussage. Eine Prozedur wird innerhalb eines plsql-Blocks aufgerufen. Ihre geschriebene Prozedur benötigt zwei Argumente, die Sie über den aufrufenden Code an den Prozeduraufruf übergeben müssen. Der von Ihnen geschriebene Prozedurcode sucht nicht nach Daten aus XML_HOURS_LOAD Tabelle.

Wir alle waren die neue Person, die Oracle lernte. Sie sollten sich einige Tutorials ansehen, die Ihnen den Einstieg in die Grundlagen der pl/sql-Codierung erleichtern und dabei helfen, die Unterschiede zwischen Funktionen und gespeicherten Prozeduren sowie die Verwendung von Parameterargumenten aufzuklären.

Nach dem, was Sie in Ihrer Frage geschrieben haben, glaube ich, dass dies der gewünschte Code ist:

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;