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

PHP Oracle dotaz vybrat příkaz uvnitř smyčky pomalé

Pokud jsem si správně přečetl váš kód, jde vám o jediný příkaz MERGE, který můžete spustit v databázi. Neznám PHP, takže vám nemohu říct, jak by se to mělo jmenovat, ale mohu vám poskytnout příkaz SQL, který chcete spustit:

MERGE INTO mep_tbl_output_details tgt
  USING (SELECT mtm.modelid,
                mtm.model_name,
                mtmc.configurationid,
                mtmc.date_code,
                mtmc.read_row_after,
                mtmc.create_from_format,
                mtmc.ip_address,
                mtmc.status,
                mtmc.ts_code
         FROM   mep_tbl_model mtm
                INNER JOIN mep_tbl_model_configuration mtmc ON mtm.modelid = mtmc.modelid_fk
         WHERE  mtm.active = 'Y'
         AND    mtm.location = 'PCBA') src
    ON (tgt.modelid_fk = src.modelid
        AND tgt.ts_code = src.ts_code
        AND tgt.configurationid_fk = src.configurationid
        AND tgt.runningdate = :log_date
        AND tgt.shift = 'Morning'
        AND tgt.quantity_status = 'OK')
WHEN NOT MATCHED THEN
  INSERT (tgt.modelid_fk, tgt.running_date, tgt.quantity_status, tgt.ts_code, tgt.shift, tgt.configuration_fk)
  VALUES (src.modelid, :log_date, 'OK', src.ts_code, 'Morning', src.configurationid);

To provede spojení, které jste znovu vynalezli pomocí svých smyček, propojí ho zpět s tabulkou, do které se pokoušíte vložit, a vloží řádek pouze v případě, že v tabulce již neexistuje.

Abyste to provedli, museli byste napsat kód PHP, když jste předali log_date jako proměnnou vazby.

Navázáním proměnné umožníte databázi přeskočit tvrdou analýzu (tj. zjištění nejlepšího způsobu provedení dotazu), což šetří čas.

Tím, že nebudete načítat data a ručně procházet smyčkou před výběrem dalších dat a zjišťováním, zda potřebujete provést vložení, přeskočíte spoustu přepínání kontextu a stahování/posouvání dat po síti. Nechte databázi udělat těžkou práci; je to to, k čemu je navržen!




  1. Jak vytvořit balíček v Oracle SQL Developer?

  2. Shrňte seznam do řetězce odděleného čárkami

  3. SQL Server a Oracle, který z nich je lepší z hlediska škálovatelnosti?

  4. Proč spuštění tohoto dotazu s EXECUTE IMMEDIATE způsobí jeho selhání?