Oracle
 sql >> база данни >  >> RDS >> Oracle

Променливата на таблицата се попълва само с една стойност

Използвайте BULK COLLECT и FORALL за обемни вложки и по-добра производителност. TheFORALL ще позволи на DML да се изпълнява за всеки ред в колекцията, без да се изисква превключване на контекст всеки път, като по този начин се подобрява цялостната производителност.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Възможно ли е да SUM() полета от тип INTERVAL?

  2. Защо времето за изпълнение на съхранената процедура на Oracle се увеличава значително в зависимост от това как се изпълнява?

  3. SQL Sub-Query - как да намерите минимална стойност

  4. CONNECT BY или йерархични заявки в RDBMS, различни от Oracle

  5. (PLSQL) Кой е най-простият израз за тестване за променена стойност в тригер на Oracle при актуализиране?