我有以下pl sql代码,它将提取xml标记值并使用oracle的EXECUTE IMMEDIATE语句将该值视为存储函数:
此代码将找到xml标记response.body().toString();
并提取其值'get_val'(它本身是一个存储函数)并将调用此函数:
<function>
在上面的代码中
DECLARE
xml_output VARCHAR2(5000);
output VARCHAR2(5000);
--sourceXML VARCHAR2(5000);
matchingXML VARCHAR2(5000);
childtag VARCHAR2(100);
childval VARCHAR2(100);
sourceXML xmltype;
BEGIN
sourceXML := xmltype('<Payheads>
<All>
<P>
<code>2</code>
<function>get_val</function>
<param>1</param>
<amount></amount>
<source>source>
</P>
</All>
</Payheads>');
childtag := 'function';
SELECT EXTRACTVALUE(sourceXML, '//'||childtag) AS into xml_output FROM SYS.DUAL;
output := 'pkg_xmltool'||'.'||xml_output||'()';
EXECUTE IMMEDIATE output;
if (output is not null)then
dbms_output.put_line(output);
elsif (output is null)then
dbms_output.put_line('null');
end if;
END;
我想在下面的模式中对此进行评估:
output := 'pkg_xmltool'||'.'||xml_output||'()';
这将调用函数output := pkg_xmltool.get_val()
,它将返回值100到输出。
这是get_val()
函数体:
get_val
iam new oracle xml。请帮助纠正此代码。
答案 0 :(得分:1)
在EXECUTE IMMEDIATE后,您必须使用INTO将结果值设置为另一个PL变量。
(声明xmlfunction)
xmlfunction := 'select pkg_xmltool.'||xml_output||'() from dual';
EXECUTE IMMEDIATE xmlfunction INTO output;