如何在此代码中正确使用oracle EXECUTE IMMEDIATE

时间:2016-03-08 09:55:30

标签: oracle execute-immediate

我有以下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。请帮助纠正此代码。

1 个答案:

答案 0 :(得分:1)

在EXECUTE IMMEDIATE后,您必须使用INTO将结果值设置为另一个PL变量。

(声明xmlfunction)

xmlfunction :=  'select pkg_xmltool.'||xml_output||'() from dual';
EXECUTE IMMEDIATE xmlfunction INTO output;