2017-02-22 2 views
-1

Pour opérer sur des millions d'enregistrements, je veux mettre une limite de 500 mais le code suivant donne une erreur. rapport Erreur: ORA-06550: ligne 6, colonne 49: PLS-00103: Rencontrés le symbole "limite" si vous attendez une des opérations suivantes:Limite de collecte en masse avec exécution immédiate

DECLARE 
    TYPE EMP_T IS TABLE OF NUMBER; 
    EMP_ID EMP_T; 
    QRY VARCHAR2(4000):='SELECT EMPLOYEE_ID FROM EMPLOYEES'; 
begin 
    execute immediate QRY bulk collect into EMP_ID LIMIT 500; 
END;  
+2

double possible de [ "vrac Prélever en" et "Exécuter immédiate" dans Oracle] (http://stackoverflow.com/questions/21117021/bulk-collect -into-and-execute-immediate-in-oracle) –

+0

'LIMIT 500'. Je suppose que vous ne comprenez pas pourquoi LIMIT est utilisé et quelle est la meilleure limite que vous pouvez mettre pour la collecte en vrac. LIMIT n'est tout simplement pas un nombre de compteur de ligne. Si vous voulez un compteur de lignes, utilisez-le dans votre requête dynamique pour restreindre la ligne. Lis ça . http://stackoverflow.com/questions/38659739/setting-a-value-for-limit-while-using-bulk-collect – XING

Répondre

0

Ce n'est pas la façon d'utiliser la clause LIMIT. Je pense que vous ne pouvez pas utiliser la clause LIMIT dans BULK COLLECT avec EXECUTE IMMEDIATE. BULK COLLECT LIMIT in EXECUTE IMMEDIATE

Exemple:

DECLARE 
    TYPE EMP_T IS TABLE OF NUMBER; 
    EMP_ID EMP_T; 
    CURSOR c_data IS SELECT empid FROM EMPLOYEE; 
begin 
OPEN c_data; 
    LOOP 
    FETCH c_data 
    BULK COLLECT INTO EMP_ID LIMIT 100; 
    EXIT WHEN EMP_ID.count = 0; 

    -- Process contents of collection here. 
    DBMS_OUTPUT.put_line(EMP_ID.count || ' rows'); 
    END LOOP; 
    CLOSE c_data; 
END; 
/
+0

Je ne peux pas utiliser le curseur car ma requête n'est pas statique. La requête est construite dynamiquement et ensuite utilisée dans l'exécution immédiate. – PTK

+0

Si vous utilisez Oracle 12c, vous pouvez utiliser la clause de limitation de ligne, quelque chose comme FETCH FIRST 500 ROWS – BobC