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

Jak pracovat s PL/SQL poli nebo kolekcemi jako parametry a pak je PŘIPOJIT podle indexu

Typ kolekce, který používáte, je varray, takže je indexován; můžete udělat:

FOR i IN 1..v_contacts_fname.COUNT
LOOP

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

END LOOP;

Úprava vzorového kódu:

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;
/

nyní dostane

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


PL/SQL procedure successfully completed.

Na začátku můžete provést velmi základní kontrolu, abyste ověřili, že count z obou polí je stejný - pokud ne, pak možná vyvolá výjimku.

Pokud chcete předat jeden argument kolekce, pak by tento argument musel být kolekcí typů záznamů nebo objektů, deklarovaných buď na úrovni schématu, nebo možná v balíčku, v závislosti na tom, jak chcete obsah používat (a do určité míry , verzi Oracle, kterou používáte). Zdá se však, že to nechcete udělat.




  1. Jaké jsou rozdíly mezi zpětným zaškrtnutím a jednoduchou uvozovkou? Mohu použít příkaz IF v dotazu, jak je uvedeno výše?

  2. SqlConnection SqlCommand SqlDataReader IDisposable

  3. Jak zálohujete a obnovujete databázi jako kopii na stejném serveru?

  4. Jak vyřešit tuto chybu aktualizace dat v Laravel