我有一个基本上使用XML作为输入的函数,并执行下一步。
我从一个语句传递XML但是它给出了错误
"字符串文字超过4000个字符"
功能
create or replace FUNCTION F_ADD_TEST(P_XML_DATA CLOB) RETURN NUMBER AS
xmlContent xmlType;
RESP_XML XMLTYPE;
o xmlType;
c xmlType;
BEGIN
--xmlContent := xmlType(xmlData);
raise_application_error('-20003',P_XML_DATA);
-- Further steps
RETURN 1;
END F_ADD_TEST;
声明
Select F_ADD_TEST('<?xml version="1.0" encoding="UTF-8"?>
<SyncReceiveDelivery xmlns:ln="http://schema.infor.com/InforOAGIS/2">
<DataArea>
<ReceiveDelivery>
<ReceiveDeliveryHeader>
<DocumentID>
<ID>100_ZHA005270</ID>
</DocumentID>
<WarehouseLocation>
<ID>W_ZHF12S</ID>
</WarehouseLocation>
</ReceiveDeliveryHeader>
<ReceiveDeliveryItem>
<LineNumber>10</LineNumber>
<ItemID>
<ID>24101600PA02435</ID>
<RevisionID>S000</RevisionID>
</ItemID>
<ReceivedQuantity>1</ReceivedQuantity>
<ServiceOrder>KRH000033</ServiceOrder>
</ReceiveDeliveryItem>
<ReceiveDeliveryItem>
<LineNumber>20</LineNumber>
<ItemID>
<ID>24101600PA04407</ID>
<RevisionID>S000</RevisionID>
</ItemID>
<ReceivedQuantity>4</ReceivedQuantity>
<ServiceOrder>KRH000033</ServiceOrder>
</ReceiveDeliveryItem>
</ReceiveDelivery>
</DataArea>
</SyncReceiveDelivery>') from dual;
如果XML内容很大,我会收到错误
&#34;字符串文字超过4000个字符&#34;
我已将数据类型从Varchar更改为clob但仍然相同。请帮帮我。
答案 0 :(得分:0)
在SQL中,'a value'
是文本文字和the documentation状态:
文本文字具有
CHAR
和VARCHAR2
数据类型的属性:
在表达式和条件中,Oracle将文本文字视为具有数据类型
CHAR
,方法是使用空白填充的比较语义对它们进行比较。文本文字的最大长度为4000字节。
所以你的代码是:
SELECT SOME_FUNCTION( 'A text literal which cannot be more than 4000 bytes' ) FROM DUAL
如果你想在SQL中的字符串中有超过4000个字节,那么你不能使用文本文字,并且必须通过绑定参数(使用PL / SQL或其他语言/中间件)或其他东西传入CLOB比如修改代码以获取文件名并从文件加载XML。
SELECT F_ADD_TEST( :bindparameter ) FROM DUAL;