gpt4 book ai didi

oracle - Oracle存储过程的挑战

转载 作者:行者123 更新时间:2023-12-02 10:50:26 25 4
gpt4 key购买 nike

我正在进行从T-SQLPL/SQL的过渡,在我的第一次尝试中,我试图创建一个存储过程(PL/SQL)以将数据加载到表中,但是出现错误:

PL/SQL: SQL Statement ignored  
ORA-06550: line 29, column 4:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

码:
declare
v_str VARCHAR2(32767) := '<ns0:ConnCustomerOrgServiceCreateRequest xmlns:ns0="http://tempuri.org" xmlns:ns6="http://schemas.microsoft.com/dynamics/2008/01/documents/ConnItemSvc" xmlns:ns4="http://schemas.microsoft.com/dynamics/2011/02/documents/DocumentPaging" xmlns:ns7="http://schemas.microsoft.com/dynamics/2011/02/documents/EntityKeyPage" xmlns:ns5="http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKey" xmlns:ns1="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes" xmlns:ns3="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria" xmlns:ns8="http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKeyList" xmlns:ns2="http://schemas.microsoft.com/dynamics/2008/01/documents/ConnCustomerOrg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:ConnCustomerOrg>
<ns2:CustTable class="entity">
<ns2:AccountNum xsi:nil="true" />
<ns2:CreditMax>0</ns2:CreditMax>
<ns2:CustGroup>10</ns2:CustGroup>
<ns2:Organization class="entity">
<ns2:NumberOfEmployees xsi:nil="true" />
<ns2:OrganizationName class="entity">
<ns2:Name>PRUEBA</ns2:Name>
</ns2:OrganizationName>
</ns2:Organization>
</ns2:CustTable>
</ns2:ConnCustomerOrg>
</ns0:ConnCustomerOrgServiceCreateRequest>
';
v_xml XMLTYPE := XMLTYPE(v_str);
begin

select x.AccountNum, x.CreditMax
from t
,XMLTABLE('/ConnCustomerOrgServiceCreateRequest/ConnCustomerOrg/CustTable'
PASSING t.xml
COLUMNS AccountNum NUMBER PATH '/CustTable/AccountNum'
,CreditMax NUMBER PATH '/REC/CreditMax'
) x

end;

最佳答案

在PL/SQL中使用SELECT语句时,必须具有INTO子句。 INTO子句使您可以将值存储在已声明的变量中,以便可以随时在块内访问它们。尝试这个:

declare
v_str VARCHAR2(32767) := '<ns0:ConnCustomerOrgServiceCreateRequest xmlns:ns0="http://tempuri.org" xmlns:ns6="http://schemas.microsoft.com/dynamics/2008/01/documents/ConnItemSvc" xmlns:ns4="http://schemas.microsoft.com/dynamics/2011/02/documents/DocumentPaging" xmlns:ns7="http://schemas.microsoft.com/dynamics/2011/02/documents/EntityKeyPage" xmlns:ns5="http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKey" xmlns:ns1="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes" xmlns:ns3="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria" xmlns:ns8="http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKeyList" xmlns:ns2="http://schemas.microsoft.com/dynamics/2008/01/documents/ConnCustomerOrg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:ConnCustomerOrg>
<ns2:CustTable class="entity">
<ns2:AccountNum xsi:nil="true" />
<ns2:CreditMax>0</ns2:CreditMax>
<ns2:CustGroup>10</ns2:CustGroup>
<ns2:Organization class="entity">
<ns2:NumberOfEmployees xsi:nil="true" />
<ns2:OrganizationName class="entity">
<ns2:Name>PRUEBA</ns2:Name>
</ns2:OrganizationName>
</ns2:Organization>
</ns2:CustTable>
</ns2:ConnCustomerOrg>
</ns0:ConnCustomerOrgServiceCreateRequest>
';


v_xml XMLTYPE := XMLTYPE(v_str);
v_accountnum VARCHAR2(2000);
v_creditmax VARCHAR2(2000);--i just assumed their datatypes since i cannot use %TYPE in here because i dont know what table accountnum and creditmax came from

BEGIN

SELECT x.AccountNum, x.CreditMax
INTO v_accountnum, v_creditmax
FROM t
,XMLTABLE('/ConnCustomerOrgServiceCreateRequest/ConnCustomerOrg/CustTable'
PASSING t.xml
COLUMNS AccountNum NUMBER PATH '/CustTable/AccountNum'
,CreditMax NUMBER PATH '/REC/CreditMax'

) x;

END;

希望这可以帮助。

关于oracle - Oracle存储过程的挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33421771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com