我有以下代码
DECLARE
tmp_ CLOB := empty_clob();
BEGIN
Dbms_Output.Put_Line('Test 4: Set CLOB "A" and then overwrite with empty_clob():');
Dbms_Output.Put_Line(' Expected: <PARENT><VALUE></VALUE></PARENT>');
in_ := Plsqlap_Record_API.New_Record('PARENT');
Plsqlap_Record_API.Set_Value(in_, 'VALUE', TO_CLOB('A'));
Plsqlap_Record_API.Set_Value(in_, 'VALUE', tmp_);
Plsqlap_Record_API.To_Xml(xml_, in_);
Plsqlap_Record_API.Clear_Record(in_);
Dbms_Output.Put_Line(' Result: ' || xml_);
EXCEPTION
WHEN OTHERS THEN
Dbms_Output.Put_Line(' Result: ' || SQLERRM);
END;
结果
测试4:设置CLOB&#34; A&#34;然后用empty_clob()覆盖:
预期:结果:ORA-22275: 指定了无效的LOB定位器
答案 0 :(得分:2)
尝试像这样初始化clob:
tmp_ CLOB := empty_clob();
而不是:
new Promise
答案 1 :(得分:1)
您无法声明tmp_ CLOB:= empty_clob();
因为它是DBMS_LOB的实现限制。
根据oracle文档:为了成功完成DBMS_LOB子程序,您必须提供一个输入定位器,表示数据库表空间或外部文件系统中已存在的LOB
您可以参考http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_lob.htm#ARPLS66616
根据Plirkee的建议,声明临时程序参数
是有效的