Съобщението за грешка изглежда достатъчно ясно:
Всъщност вие се свързвате с друг въпрос, който обяснява, че това е ограничение за изпълнение. 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'
По-лесно за разбиране, лесно забелязване на липсващото съединение. Четивността е характеристика.