表格中的XML就是这样的
<?xml version="1.0" encoding="UTF-8"?>
<select multiselect="false" name="c_f_2441_select_dev" phiField="true" readOnly="false" title="select_dev">
<dataValidationRule/>
<CFData>false</CFData>
<suppressRules>false</suppressRules>
<options>
<option code="1" status="A">Sel1</option>
<option code="2" status="A">Sel2</option>
<option code="3" status="A">Sel3</option>
</options>
<groups/>
</select>
在“options”元素中有三个值'Sel1','Sel2'和'Sel3'
select xt.*
from ST3_ENT1_REG4.custom_field cf,
XMLTABLE('/select'
PASSING cf.data_model_xml
COLUMNS
options VARCHAR2(20) PATH 'options'
) xt
where field_name='c_f_2441_select_dev';
以上查询连接三个值,并将输出作为“Sel1Sel2Sel3”。有没有办法可以在三个不同的行中得到这三个值。
由于
答案 0 :(得分:2)
Oracle 11g R2架构设置:
CREATE TABLE custom_field ( field_name, data_model_xml ) AS
SELECT
'c_f_2441_select_dev',
XMLTYPE( '<?xml version="1.0" encoding="UTF-8"?>
<select multiselect="false" name="c_f_2441_select_dev" phiField="true" readOnly="false" title="select_dev">
<dataValidationRule/>
<CFData>false</CFData>
<suppressRules>false</suppressRules>
<options>
<option code="1" status="A">Sel1</option>
<option code="2" status="A">Sel2</option>
<option code="3" status="A">Sel3</option>
</options>
<groups/>
</select>' ) FROM DUAL;
查询1 :
如果您只想要第1,第2和第3选项元素的内容:
select xt.*
from custom_field cf,
XMLTABLE('/select/options'
PASSING cf.data_model_xml
COLUMNS
option1 VARCHAR2(20) PATH 'option[1]',
option2 VARCHAR2(20) PATH 'option[2]',
option3 VARCHAR2(20) PATH 'option[3]'
) xt
where field_name='c_f_2441_select_dev'
<强> Results 强>:
| OPTION1 | OPTION2 | OPTION3 |
|---------|---------|---------|
| Sel1 | Sel2 | Sel3 |
查询2 :
如果你想要code
属性为1,2和3的选项元素的文本,那么:
select xt.*
from custom_field cf,
XMLTABLE('/select/options'
PASSING cf.data_model_xml
COLUMNS
option1 VARCHAR2(20) PATH 'option[@code=1]',
option2 VARCHAR2(20) PATH 'option[@code=2]',
option3 VARCHAR2(20) PATH 'option[@code=3]'
) xt
where field_name='c_f_2441_select_dev'
<强> Results 强>:
| OPTION1 | OPTION2 | OPTION3 |
|---------|---------|---------|
| Sel1 | Sel2 | Sel3 |
查询3 - 更新 - 在单独的行中。:
select xt.*
from custom_field cf,
XMLTABLE(
'/select/options/option'
PASSING cf.data_model_xml
COLUMNS value VARCHAR2(20) PATH 'text()'
) xt
where field_name='c_f_2441_select_dev'
<强> Results 强>:
| VALUE |
|-------|
| Sel1 |
| Sel2 |
| Sel3 |