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

Tabelvariabel udfyldes kun med én værdi

Brug BULK COLLECT og FORALL for bulk skær og bedre ydeevne. FORALL sætning vil tillade, at DML'en kan køres for hver række i samlingen uden at kræve et kontekstskift hver gang, hvilket forbedrer den overordnede ydeevne.

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. Skal jeg oprette et indeks for en identitetskolonne i SQL Server, eller oprettes det automatisk?

  2. php POST form forespørgsel opdatering dynamisk variabel

  3. Hvorfor er den nuværende Oracle ODAC-forbindelse ikke synlig i VS 2013?

  4. Hvordan får jeg i SSIS returneret antallet af rækker fra den kilde, der SKAL behandles