Неверный ввод / Doc URL Ошибка - PullRequest
0 голосов
/ 03 августа 2011

У меня есть следующий код, который подключается к базе данных оракула через мыло, создает блоб XML и возвращает его на экран.

Я получаю следующую ошибку и не могу понять, почему.

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'] доказано, что это значение логического хэша. Все остальные вызовы мыла, использующие эту функцию формата, как и ожидалось. Bexcore.checksessionid также доказано, что он действителен, а не является причиной этой ошибки, как bexcore.createXmlData (каждый из них используется в тысячах других случаев одинаково и работает как положено.)

1 Ответ

0 голосов
/ 05 августа 2011

Проблема, с которой я столкнулся, заключалась в том, что у пользователя, обращающегося к базе данных, не было настроено разрешение на вызов запрошенных пакетов.

use

grant all on <packagename> to <user>;

чтобы решить эту проблему.

...