1
我有以下的PL SQL代碼,將提取XML標記值,並使用甲骨文的EXECUTE IMMEDIATE語句把該值作爲存儲功能:如何corrrectly使用Oracle在這個代碼中執行即時
該代碼會發現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;
IAM新的Oracle XML。請幫助更正此代碼。
請提供PL/SQL的以下工作示例:'輸出:= pkg_xmltool.function_name();'所以,這將是明顯的動態SQL應該是什麼樣子喜歡。除此之外,你忘了添加'BEGIN ... END; /'到你的匿名PL/SQL塊'輸出' – MaxU
hi @MaxU,我已經更新了這篇文章。謝謝 – user5005768