2016-04-05 15 views
0

Ben nameBelgianOracle, SQL ve XML Seçme şeyler

içeren nerede bu tablodan Name And description seçmek istiyor

INSERT INTO Test_T VALUES ('one', XMLType('<?xml version="1.0" encoding="UTF-8"?> 
<breakfast_menu> 
<food> 
    <name>Belgian Waffles</name> 
    <price>$5.95</price> 
    <description>Two of our famous Belgian Waffles with plenty of real maple syrup</description> 
    <calories>650</calories> 
</food> 
<food> 
    <name>Strawberry Belgian Waffles</name> 
    <price>$7.95</price> 
    <description>Light Belgian waffles covered with strawberries and whipped cream</description> 
    <calories>900</calories> 
</food> 
<food> 
    <name>Berry-Berry Belgian Waffles</name> 
    <price>$8.95</price> 
    <description>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</description> 
    <calories>900</calories> 
</food> 
    <food> 
    <name>French Toast</name> 
    <price>$4.50</price> 
    <description>Thick slices made from our homemade sourdough bread</description> 
    <calories>600</calories> 
</food> 
<food> 
    <name>Homestyle Breakfast</name> 
    <price>$6.95</price> 
    <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description> 
    <calories>950</calories> 
</food> 
</breakfast_menu> 
')); 

içinde bu masayı Bununla

CREATE TABLE Test_T (
    COL_1 VARCHAR(30), 
    COL_2 XMLTYPE 
); 

var

Bu select deyimi ile başladım, ancak

çalışıyor görünmüyor
SELECT XMLTYPE FROM Test_T WHERE ('/breakfast_menu/food[contains(name, 'Belgian')]'); 

Herkes bana doğru yönde işaret edebilir mi?

cevap

1

XMLTABLE adlı kullanıcıyı arıyor.

SELECT name, description 
    FROM test_t, 
     XMLTABLE (
      '/breakfast_menu/food' 
      PASSING test_t.col_2 
      COLUMNS name VARCHAR2 (100) PATH 'name', 
        description VARCHAR2 (100) PATH 'description') 
WHERE name LIKE '%Belgian%'; 

çeşitli faktörlere bağlı olarak, bunlardan biri olabilir -

SELECT name, description 
    FROM test_t, 
     XMLTABLE (
      '/breakfast_menu/food[contains(name,"Belgian")]' 
      PASSING test_t.col_2 
      COLUMNS name VARCHAR2 (100) PATH 'name', 
        description VARCHAR2 (100) PATH 'description'); 

aynı şey olurdu yazmak için başka bir yol - İşte

bir SQL deyimi sizin XML karşı gibi görünecektir nasıl daha verimli. Teşhisleri çalıştırabilir ve verileriniz için hangi filtreleme türünün en uygun olduğunu belirleyebilirsiniz.

+0

Hey adam, bu çok yardımcı olur, teşekkür ederim! –

+0

@ ruudvan- Aslında ilkini kullandığımda boş bir masa veriyor. –