Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn PHP Oracle lựa chọn câu lệnh bên trong vòng lặp chậm

Nếu tôi đã đọc mã của bạn một cách chính xác, những gì bạn đang theo dõi là một câu lệnh MERGE duy nhất mà bạn có thể chạy trên cơ sở dữ liệu. Tôi không biết PHP, vì vậy tôi không thể cung cấp cho bạn cách gọi nó, nhưng tôi có thể cung cấp cho bạn câu lệnh SQL để chạy:

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

Điều này thực hiện liên kết mà bạn đang phát minh lại với các vòng lặp của mình, liên kết nó trở lại bảng mà bạn đang cố gắng chèn vào và chỉ chèn một hàng nếu nó chưa tồn tại trong bảng.

Bạn sẽ cần viết mã PHP để thực thi điều này, sau khi đã chuyển log_date vào làm biến liên kết.

Bằng cách liên kết biến, bạn cho phép cơ sở dữ liệu bỏ qua phân tích cú pháp cứng (tức là tìm ra cách tốt nhất để thực thi truy vấn), giúp tiết kiệm thời gian.

Bằng cách không tìm nạp dữ liệu và vòng lặp theo cách thủ công trước khi chọn thêm dữ liệu và tìm hiểu xem bạn có cần thực hiện chèn hay không, bạn bỏ qua rất nhiều chuyển đổi ngữ cảnh và kéo / đẩy dữ liệu qua mạng. Để cơ sở dữ liệu thực hiện công việc nặng nhọc; đó là những gì nó được thiết kế để làm!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khai báo một biến tạm thời trong cơ sở dữ liệu Oracle

  2. Lấy XML từ năm bảng Oracle khác nhau

  3. Các hàng Oracle JDBC batchUpdate bị ảnh hưởng luôn là -2 (Statement.SUCCESS_NO_INFO)

  4. Sự cố với thủ tục thực thi trong PL / SQL Developer

  5. Tham gia bên trong so với ở đâu