Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tidak dapat menarik hasil dengan meneruskan input sebagai jalur xml di Oracle

Dengan asumsi Anda mencoba memfilter ID dalam XML, Anda memiliki masalah dengan sintaks, Anda telah menyediakan simpul root sebagai ActivityId alih-alih Aktivitas, Anda tidak turun ke simpul ID, Anda menyalahgunakan contains - dan itu mungkin bukan yang Anda inginkan; dan Anda mengabaikan ruang nama.

Ini hanya akan menemukan baris di mana XML memiliki ID tertentu:

SELECT * from activity
where ExtractValue(xml,
  '/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID/text()',
  'xmlns="urn:astrazeneca:na:Activity:domain:3" xmlns:ns2="urn:astrazeneca:na:CommonTypes:domain:2"'
  ) = 10669;

Tetapi ExtractValue sudah lama tidak digunakan lagi, jadi Anda harus menggunakan XMLQuery sebagai gantinya. Atau dalam konteks ini mungkin lebih masuk akal untuk menggunakan XMLExists, dengan nilai yang ingin Anda sematkan:

SELECT * from activity
where XMLExists('
    declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
    declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
    /Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=10669]
  '
  passing xml
);

atau mungkin lebih berguna sebagai argumen:

SELECT * from activity
where XMLExists('
    declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
    declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
    /Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=$id]
  '
  passing xml, 10669 as "id"
);

db<>biola

Jika Anda ingin mengekstrak data tertentu dari XML dalam baris yang cocok, lihat XMLQuery atau XMLTable - tetapi itu adalah masalah terpisah.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE dengan 2 gabungan kiri menggantung menggunakan LITERAL untuk predikat di luar GABUNG mengecualikan baris dari sebagian besar tabel KIRI

  2. ADD_MONTHS() Fungsi di Oracle

  3. Oracle PLSQL setara dengan ASCIISTR(N'str')

  4. Lihat transaksi terbuka di Oracle

  5. Kesalahan dalam kueri Oracle Subkueri baris tunggal mengembalikan lebih dari satu baris