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

Vkládejte hromadné záznamy do vzdálené databáze (dblink) pomocí Bulk Collect

Chybová zpráva se zdá být dostatečně jasná:

Ve skutečnosti odkazujete na další otázku, která vysvětluje, že se jedná o omezení implementace. PL/SQL nám neumožňuje používat FORALL příkazy přes databázové odkazy a to je vše.

Naštěstí ve svém kódu nemusíte používat hromadné shromažďování a FORALL. Jednoduchý příkaz INSERT INTO .... SELECT by vás měl vidět správně:

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'

Váš kód nepoužívá explicitní syntaxi spojení ANSI 92 a kód jste zmačkali, takže je těžké ho přečíst. V důsledku toho je snadné přehlédnout, že jste nenapsali podmínku připojení pro [email protected] C . Oba dílčí dotazy tedy vytvoří kartézský součin pro všechny záznamy v C . Tohle asi nechcete.

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'

Snazší pochopení, snadné zjištění chybějícího spojení. Čitelnost je funkce.




  1. Průvodce analýzou dat:Je čas vyniknout pomocí Excelu!

  2. ORA-01861:literál neodpovídá formátovacímu řetězci

  3. PDO DBLIB přistupující k SQL Server 2008 a 2012

  4. SQLite s