sql >> Database >  >> RDS >> Oracle

Waarom voegt deze opgeslagen procedure NULL-waarden in de tabel in?

Om uw vraag te beantwoorden waarom het nulls invoegt, dat is omdat u geen waarden aan de procedureparameters verstrekt wanneer u het uitvoert.

Op basis van wat u in de vraag en uw opmerking hierboven hebt vermeld, lijkt het erop dat u een aantal fundamentele vaardigheden mist in het werken met Oracle. De code die je hebt geschreven is een procedure, geen functie, dus je kunt hem niet aanroepen in een SELECT uitspraak. Een procedure wordt binnen een plsql-blok genoemd. Uw procedure zoals geschreven heeft twee argumenten, die u via de aanroepcode aan de procedureaanroep moet doorgeven. De procedurecode die u schreef, zoekt niet naar gegevens uit de XML_HOURS_LOAD tafel.

We zijn allemaal de nieuwe persoon geweest die Oracle leerde. U zult enkele tutorials willen bekijken om u op weg te helpen met de grondbeginselen van pl/sql-codering om de verschillen tussen functies en opgeslagen procedures op te helderen en hoe u parameterargumenten gebruikt.

Op basis van wat je in je vraag hebt geschreven, denk ik dat dit de code is die je wilt:

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;



  1. Read Committed is een must voor Postgres-compatibele gedistribueerde SQL-databases

  2. Hoe datatypes zoals integers (integer met integer) &varchar (varchar met varchar) in mysql samen te voegen?

  3. ORA-21700:object bestaat niet of is gemarkeerd voor verwijdering voor Associative Array als invoerparameter aangeroepen vanuit ODP.NET

  4. Syntaxis alle opgeslagen procedures controleren?