Oracle
 sql >> база данни >  >> RDS >> Oracle

Вмъкнете групови записи в отдалечена база данни (dblink) с помощта на Bulk Collect

Съобщението за грешка изглежда достатъчно ясно:

Всъщност вие се свързвате с друг въпрос, който обяснява, че това е ограничение за изпълнение. PL/SQL не ни позволява да използваме FORALL оператори във връзки към база данни и това е.

За щастие не е необходимо да използвате групово събиране и FORALL във вашия код. Една проста инструкция INSERT INTO .... SELECT трябва да ви види правилно:

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'

Вашият код не използва изричния синтаксис за присъединяване ANSI 92 и вие сте свили кода, така че е труден за четене. Следователно е лесно да пропуснете, че не сте написали условие за присъединяване за [email protected] C . Така че и двете подзаявки ще създадат декартово произведение за всички записи в C . Вероятно не искате това.

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'

По-лесно за разбиране, лесно забелязване на липсващото съединение. Четивността е характеристика.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DBMS_JOB срещу DBMS_SCHEDULER

  2. Не може да се актуализира моделът на данни на обекта от базата данни поради TNS грешка

  3. Как да проверите дали колона съществува, преди да я добавите към съществуваща таблица в PL/SQL?

  4. Намиране на броя на знаците и числата в низ

  5. Външно съединение на Oracle с условие за филтър на втората таблица