如何在此代码中正确使用 oracle 立即执行



我有以下pl sql代码,它将提取一个XML标签值,并使用oracle的EXECUTE IMMEDIATE 语句将该值视为存储函数:

此代码将查找 xml 标记<function>并提取其值"get_val"(它本身是一个存储函数),并将调用此函数:

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() 这将调用函数get_val()该函数将返回值 100 进行输出。在这里,这是get_val函数体:

FUNCTION get_val  return  float IS  ret float;   
  v_code NUMBER;
  v_errm VARCHAR2(500);
  BEGIN
   ret := 100;
   if (ret is not null)then
    RETURN  ret;
    elsif (ret is null)then
    RETURN  null;
    end if;
    EXCEPTION    
    WHEN OTHERS THEN
    v_code := SQLCODE;
    v_errm := SUBSTR(SQLERRM, 1 , 500);
    --DBMS_OUTPUT.PUT_LINE('Error code ' || v_code || ': ' || v_errm);
    RETURN '<result><status>Error'||v_errm||'</status></result>';
  END get_val;

我是新的甲骨文XML。请帮助更正此代码。

您必须在

立即执行后使用 INTO 将结果值设置为另一个 PL 变量。

(声明 XML函数)

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

相关内容

  • 没有找到相关文章

最新更新