sql >> Databáze >  >> RDS >> Oracle

Proměnná tabulky je vyplněna pouze jednou hodnotou

Použijte BULK COLLECT a FORALL pro hromadné vložky a lepší výkon. FORALL umožní spuštění DML pro každý řádek v kolekci bez nutnosti pokaždé přepínat kontext, čímž se zlepší celkový výkon.

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. MySqlException na ExecuteReader výběrem UserID(PK)

  2. Jak zjistím rozdíl v hodinách mezi dvěma daty?

  3. Rails:rake db:create:all (nelze se připojit k serveru)

  4. Jak najdu řetězec v databázi SQL Serveru?