我有以下代码通过soap连接到oracle数据库,创建XML Blob并将其返回到屏幕。
我收到以下错误,无法弄清楚原因。
array(3) {
["faultcode"]=>
string(11) "soap:Client"
["faultstring"]=>
string(22) "Error processing input"
["detail"]=>
array(1) {
["OracleErrors"]=>
string(39) "
Incorrect Input Doc/URL
"
}
}
我正在使用以下函数来调用存储过程。
function getUsersData(){
$xmlfunc = 'GETUSERS';
$pkg = 'JSON_EXPORTS';
$inparam = array("SESSIONHASH-VARCHAR2-IN" => $_SESSION['sessionhash']);
$outparam = array("USERSDATA-XMLTYPE-OUT");
$oradb = oradb::getconnection();
$oradb->newxml($xmlfunc,$pkg,$inparam,$outparam);
$result = $oradb->getxml(false,false,false,true);
print_r($result);
}
这是我正在调用的存储过程:
CREATE OR REPLACE PACKAGE BODY vivouser.json_exports IS
-- @Oracle bexV2
PROCEDURE getusers(sessionhash IN VARCHAR2,
usersdata OUT XMLTYPE)
IS
p_companyid number;
p_storegroupid number;
p_userid number;
BEGIN
bexcore.checksessionid(sessionhash, p_companyid, p_storegroupid, p_userid);
usersdata := bexcore.CreateXMLData(
'select userid,
tbu.companyid,
tbu.firstname,
tbu.middlename,
tbu.lastname,
tbu.gender,
tbu.payrollnumber,
tbu.ismanager,
tpt.description,
tpt.wagerate
from tbuser tbu
left join tbposition tbp using (USERID)
left join tbpositiontype tpt using (POSITIONTYPEID);'
);
END getusers;
END json_exports;
另外,请注意:$ _SESSION ['sessionhash']被证明是一个逻辑哈希值。使用此格式的所有其他soap调用按预期运行。 Bexcore.checksessionid也被证明是有效的,而不是这个错误的原因,因为bexcore.createXmlData(它们在数千个其他情况下以相同的方式使用并按预期运行。)
答案 0 :(得分:0)
我遇到的问题是,访问数据库的用户没有设置允许调用请求的包的权限。
使用
grant all on <packagename> to <user>;
解决这个问题。