3

何が悪いのかを理解するのに役立ちます。

ポイントは:

  1. バッファリングを含め、XMLデータを作成します。

    ob_start();
    header("Content-Type: text/xml");
    header("Expires: Thu, 19 Feb 1998 13:24:18 GMT"); 
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Cache-Control: post-check=0,pre-check=0"); 
    header("Cache-Control: max-age=0"); 
    header("Pragma: no-cache"); echo "<?xml version=\"1.0\" encoding=\"WINDOWS-1251\" standalone=\"yes\"?>";
        echo "<MAIN>";
        echo "<ROWSET>";
            echo "<ROW>";
                echo "<CODE>somecode</CODE>";
                echo "<DESC>somedesc</DESC>";
                echo "<NOMINAL>somenominal</NOMINAL>";
                echo "<DATE>2012.01.01</DATE>";
                echo "<TYPE>sometype</TYPE>";
            echo "</ROW>";
        echo "</ROWSET>";
    echo "</MAIN>";
    
  2. バッファの内容を変数に入れ、バッファをcontentフラッシュし、バッファリングをオフにします。

    $content = ob_get_contents();
    ob_end_clean();
    
  3. データベースに接続し、関数を呼び出してcontent、公式マニュアルから取得した、私が書いたコードを保存するためにパスします。そうではないかもしれません)。

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    header('Content-Type: text/xml; charset=windows-1251');
    $c=oci_connect("test_user", "test_schema", "DBtest");
    $rclob = oci_new_descriptor($c, OCI_D_LOB);
    $clob = oci_new_descriptor($c, OCI_D_LOB);   
    $s = oci_parse($c, "begin :ret:=create_sm.get_xml_data(:data, :out); end;");    
    oci_bind_by_name($s, ":data", $clob, -1, OCI_B_CLOB);
    oci_bind_by_name($s, ":ret", $rclob, -1, OCI_B_CLOB);
    oci_bind_by_name($s, ":out", $out, 1000);
    $clob->writeTemporary($content);
    $r = oci_execute($s, OCI_DEFAULT); // use OCI_DEFAULT so $lob->save() works
    //$e = oci_error($s);
    //var_dump($e);
    oci_commit($c);
    //echo $out;
    $returnvalues = convertDateBackwards($rclob->load());
    $returnvalues = str_replace("<SECURITY>","<SECURITY ret=\"".$out."\">",$returnvalues);
    //echo convertDateBackwards($rclob->load());
    echo $returnvalues;
    $clob->free(); // close LOB descriptor to free resources
    $rclob->free(); // close LOB descriptor to free resources
    oci_free_statement($s);
    oci_close($c);
    

エラーは次のように表示されます。

Warning: oci_execute() [function.oci-execute]: 
ORA-06550: line 1, column 14: 
PLS-00201: identifier 'CREATE_SM.GET_XML_DATA' must be declared 
ORA-06550: line 1, column 7: PL / SQL: Statement ignored in C:\webserver\www.site.ru\www\blocks\create_xml.php on line 57  
Fatal error: Call to undefined function convertDateBackwards() in C:\webserver\www.site.ru\www\blocks\create_xml.php on line 62
4

1 に答える 1

0

解決しました。所有者が最初にコメントとして投稿し、次の方法で解決しました:

はい、私が言ったように、問題はアクセス権に関連していました。助けてくれてありがとう。

APCコメントを使用:

So, does TEST_USER own a package called CREATE_SM which has
a function called GET_XML_DATA? 
It appears not, because that is what the error message is telling you. 
于 2013-08-21T12:38:48.833 に答える