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

Chèn hàng loạt bản ghi vào cơ sở dữ liệu từ xa (dblink) bằng Thu thập hàng loạt

Thông báo lỗi có vẻ đủ rõ ràng:

Thật vậy, bạn liên kết đến một câu hỏi khác giải thích rằng đây là một hạn chế triển khai. PL / SQL không cho phép chúng tôi sử dụng câu lệnh FORALL qua các liên kết cơ sở dữ liệu và đó là điều đó.

May mắn thay, bạn không cần phải sử dụng thu thập hàng loạt và FORALL trong mã của mình. Một câu lệnh INSERT INTO .... SELECT đơn giản sẽ giúp bạn hiểu đúng:

INSERT INTO [email protected] 
    SELECT A.PARTY_SITE_NUMBER FMAT_FMATID, B.ZADDRESSFMATID F4F_FMATID,
    C.ADDRESS1 FMAT_VALUE, B.STREET F4F_VALUE , 'ADDRESS1' 
    FROM [email protected] A , f4f_corporateaccount B , [email protected] C
    WHERE 1=1
    AND B.ROLECODETEXT = 'Site Account'
    AND A.PARTY_SITE_NUMBER = B.ZADDRESSFMATID
    AND A.STATUS = 'A'

    UNION ALL 
    ------------------------------------------------------Address2-----------------------------------------------------------------------------

    SELECT A.PARTY_SITE_NUMBER FMAT_FMATID, B.ZADDRESSFMATID F4F_FMATID,
    C.ADDRESS2 FMAT_VALUE, B.addressline1 F4F_VALUE , 'ADDRESS2'  
    FROM [email protected] A , f4f_corporateaccount B , [email protected] C
    WHERE 1=1
    AND B.ROLECODETEXT = 'Site Account'
    AND A.PARTY_SITE_NUMBER = B.ZADDRESSFMATID
    AND A.STATUS = 'A'

Mã của bạn không sử dụng cú pháp nối ANSI 92 rõ ràng và bạn đã tóm tắt mã nên rất khó đọc. Do đó, rất dễ bỏ sót rằng bạn chưa viết điều kiện tham gia cho [email protected] C . Vì vậy, cả hai truy vấn con sẽ tạo ra một Sản phẩm Descartes cho tất cả các bản ghi trong C . Có thể bạn không muốn điều này.

SELECT A.PARTY_SITE_NUMBER as FMAT_FMATID
        , B.ZADDRESSFMATID as F4F_FMATID
        , C.ADDRESS2 as FMAT_VALUE
        , B.addressline1 as F4F_VALUE
        , 'ADDRESS2'  
FROM [email protected] A
      inner join  f4f_corporateaccount B on A.PARTY_SITE_NUMBER = B.ZADDRESSFMATID
      inner join  [email protected] C on ** something goes here **
WHERE  B.ROLECODETEXT = 'Site Account'
AND A.STATUS = 'A'

Dễ hiểu hơn, dễ dàng phát hiện phần nối bị thiếu. Khả năng đọc là một tính năng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ASP.NET - ORA-04068:trạng thái hiện có của các gói đã bị loại bỏ

  2. Thu thập số liệu thống kê về một Chỉ mục hoặc thả tạo?

  3. Chức năng ngủ trong ORACLE

  4. JDBC - Oracle ArrayIndexOutOfBoundsException

  5. trình tự không tồn tại ORA-02289