sql >> Database >  >> RDS >> Oracle

Tabelvariabele is slechts met één waarde gevuld

Gebruik BULK COLLECT en FORALL voor bulk inserts en betere prestaties. De FORALL statement zorgt ervoor dat de DML voor elke rij in de verzameling kan worden uitgevoerd zonder dat er elke keer een contextwisseling nodig is, waardoor de algehele prestaties worden verbeterd.

CREATE OR REPLACE PROCEDURE get_attributes (
    p_auth_use_id  IN   NUMBER,
    p_category_id  IN   NUMBER,
    p_version_id   IN   NUMBER,
    p_result       OUT  types.cursor_type
) IS
    v_numbers sys.odcinumberlist := NULL;
BEGIN 
    SELECT s.id
    BULK COLLECT --> Bulk collect all values
    INTO v_numbers
    FROM inv_srv s
        start with s.parent_srv_id in (
          SELECT ID FROM INV_SRV 
          WHERE SRV_CATEGORY_ID IN 
            (
                SELECT id
                FROM   inv_srv_category
                START WITH parent_category_id = P_CATEGORY_ID
                CONNECT BY PRIOR id = parent_category_id
            ) 
            OR SRV_CATEGORY_ID = P_CATEGORY_ID)
        connect by prior s.id = s.parent_srv_id;

        FORALL i IN 1..v_numbers.COUNT   
        INSERT INTO your_table VALUES v_numbers ( i ); --> Bulk insert

END;


  1. een mysql-tabel maken vanuit een inner join

  2. PostgreSQL-type tijdstempel wijzigen zonder tijdzone -> met tijdzone

  3. fout bij het invoegen van GROTE volumegegevens in mysql met behulp van node.js Foutcode:'ECONNRESET')

  4. SQL Server IN vs. BESTAAN Prestaties