sql >> Database >  >> RDS >> Oracle

Hoe een variabele van een cursor te gebruiken in de select-opdracht van een andere cursor in pl/sql

U moet dynamische SQL gebruiken om dit te bereiken; zoiets als:

DECLARE
    TYPE cur_type IS REF CURSOR;

    CURSOR client_cur IS
        SELECT DISTING username
        FROM all_users
        WHERE length(username) = 3;

    emails_cur cur_type;
    l_cur_string VARCHAR2(128);
    l_email_id <type>;
    l_name <type>;
BEGIN
    FOR client IN client_cur LOOP
        dbms_output.put_line('Client is '|| client.username);
        l_cur_string := 'SELECT id, name FROM '
            || client.username || '.org';
        OPEN emails_cur FOR l_cur_string;
        LOOP
            FETCH emails_cur INTO l_email_id, l_name;
            EXIT WHEN emails_cur%NOTFOUND;
            dbms_output.put_line('Org id is ' || l_email_id
                || ' org name ' || l_name);
        END LOOP;
        CLOSE emails_cur;
    END LOOP;
END;
/

Bewerkt om twee fouten te corrigeren en om links naar 10g-documentatie toe te voegen voor OPEN-FOR en een voorbeeld .Bewerkt om van de binnenste cursor een stringvariabele te maken.



  1. Buitenlandse sleutels moeten Index zijn in mySQL?

  2. Invoegen in Oracle en ophalen van de gegenereerde sequentie-ID

  3. Echo-menustructuur met recursieve functie

  4. Krijg een bepaalde kolomwaardetelling in orakel met inner join