This is a much more efficient query. Next step is to run your query through explain plan and make sure you don't have other inefficiencies or a cartisian. However, I think the above suggested changes to your query should improve its performance. Unfortunately, I don't have access to an EBS instance so I can't test this query myself.
SELECT p.PARTY_NAME||':'||p.PARTY_TYPE INTO :BLK_SEAGRS_CREDIT_PASSTHROUGH.DISP_CUST FROM HZ_PARTIES@DAP2.WORLD p, HZ_PARTY_SITES@DAP2.WORLD ps, HZ_CUST_SITE_USES_ALL@DAP2.WORLD cs WHERE p.party_id = ps.party_id AND ps.party_site_id = cs.party_site_id AND cs.site_use_code = :BLK_SEAGRS_CREDIT_PASSTHROUGH.TEXT_CUST_LEVEL AND cs.location = :BLK_SEAGRS_CREDIT_PASSTHROUGH.TEXT_CUST_VALUE AND cs.ORG_ID = 189;
i retrieve every time more than 2000 record.No matter how fast your SQL query is, pulling that many rows of data out of the database will take some time, and you definitely cannot display that on your form in any meaningful way to the user. There is something wrong with the design of the form that requires you to retrieve over 2k rows.