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

Не може да се изтеглят резултатите чрез подаване на вход като xml път в oracle

Ако приемем, че се опитвате да филтрирате ID в рамките на XML, имате проблем със синтаксиса, предоставили сте основния възел като ActivityId вместо Activity, не се спускате до ID възела, използвате погрешно contains - и това вероятно не е това, което искате; и пренебрегвате пространствата от имена.

Това ще намери само редове, където XML има конкретен идентификатор:

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;

Но ExtractValue отдавна е отхвърлен, така че вместо това трябва да използвате XMLQuery. Или в този контекст вероятно ще има повече смисъл да използвате XMLExists със стойността, която искате да вградите:

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
);

или може би по-полезно предоставен като аргумент:

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<>fiddle

Ако след това искате да извлечете конкретни данни от XML в съвпадащи редове, тогава погледнете XMLQuery или XMLTable - но това е отделен проблем.




  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:Направете съставен ключ, съдържащ три Foregin ключа

  2. Получаване на стойности, свързани с максималните и минималните редове в Oracle

  3. Курсорът в процедурата връща повече стойности от заявката

  4. Oracle APEX Database Trigger - Проблеми с рефериране на колони на база данни

  5. История на блокиранията в Oracle?