sql >> Databasteknik >  >> RDS >> Oracle

Tabellvariabel fylls endast med ett värde

Använd BULK COLLECT och FORALL för bulkskär och bättre prestanda. FORALL kommer att tillåta DML att köras för varje rad i samlingen utan att kräva en kontextväxling varje gång, vilket förbättrar den övergripande prestandan.

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. Hur kontrollerar man om en rad finns i MySQL? (dvs kontrollera om ett e-postmeddelande finns i MySQL)

  2. enkel SQL-fråga som ger Ogiltig användning av gruppfunktion

  3. Hur återställer jag SqLite-databasen i Android?

  4. Kommandon är osynkroniserade; du kan inte köra det här kommandot nu medan du anropar lagrad procedur i Mysql