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

Как да работите с PL/SQL масиви или колекции като параметри, след което да ги СЪЕДИНИТЕ заедно по индекс

Типът колекция, който използвате, е променлива, така че е индексирана; можете да направите:

FOR i IN 1..v_contacts_fname.COUNT
LOOP

  dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));

END LOOP;

Адаптиране на вашия примерен код:

DECLARE

PROCEDURE create_account(p_entity_id NUMBER
                         , p_sub_id NUMBER
                         , v_contacts_fname sys.odcivarchar2list
                         , v_contacts_lname sys.odcivarchar2list
                         )
  IS

  BEGIN

    dbms_output.put_line('Entity_id: ' || p_entity_id || ' - Sub_id: ' || p_sub_id);

    FOR i IN 1..v_contacts_fname.COUNT
    LOOP

      dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));

    END LOOP;


END create_account;

BEGIN

  create_account(p_entity_id            => 550005
                     , p_sub_id         => 100051
                     , v_contacts_fname => sys.odcivarchar2list('dan','bob')
                     , v_contacts_lname => sys.odcivarchar2list('anderson','bebop')
      ) ;

END;
/

сега получава

Entity_id: 550005 - Sub_id: 100051
dan, anderson
bob, bebop


PL/SQL procedure successfully completed.

Можете да направите много елементарна проверка в началото, за да проверите дали count и от двата масива е едно и също - ако не, тогава може би хвърлете изключение.

Ако искате да предадете един аргумент за колекция, тогава този аргумент ще трябва да бъде колекция от типове записи или обекти, декларирани или на ниво схема, или може би в пакет, в зависимост от това как искате да използвате съдържанието (и до известна степен , версията на Oracle, която използвате). Все пак изглежда, че не искате да правите това.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция NLS_CHARSET_NAME() в Oracle

  2. Пуснете таблицата, ако съществува

  3. REGEXP_REPLACE - премахване на запетаи от низ САМО ако е ограден в ()

  4. Времето за изчакване на заявката за ODP.NET връзка изтече

  5. Oracle PL/SQL – Колекции (вложени таблици)