2016-11-10 3 views
0

私のOracleは支払われません。だから私は無制限のバッファサイズを使用することはできません。私のPHPコードは以下の通りです:PHPから1,000,000を超えるバッファを返すOracle関数を呼び出す方法(最大)

<?php 
$conn = oci_connect('****', '****', '****'); 
if($conn){ 
    $operation = isset($_POST['****']) ? $_POST['****'] : NULL; 
    $year = isset($_POST['****']) ? $_POST['****'] : NULL; 
    $month = isset($_POST['****']) ? $_POST['****'] : NULL; 

    switch($operation){ 
     case 'summary': 
      $sql = "BEGIN 
        :RET:=RKARIM.PKG_SR_FUNCTIONS.REPORT_NET(:SAL_YEAR_MONTH); 
        END;"; 
      $parse = oci_parse($conn, $sql); 
      oci_bind_by_name($parse, ":RET", $ret, 32767); 
      oci_bind_by_name($parse, ":SAL_YEAR_MONTH", $sal_year_month); 
      oci_execute($parse); 
      echo htmlentities($ret); 
      break; 
     case 'allowances': 
       NULL; 
      break; 
     case 'deductions': 
       NULL; 
      break; 
    } 

    oci_close($conn); 
    unset($_POST['****']); 
    unset($_POST['****']); 
    unset($_POST['****']); 
} 
else{ 
    echo 'Server down.'; 
    die; 
    } 
?> 

これで、OracleからREPORT_NET(SAL_YEAR_MONTH NUMBER)関数は、巨大な文字列(最大バッファより)を返します。最初はXMLTYPEでした。しかし、PHPのXMLTYPEを処理するための問題だから、私はVARCHAR2でそれを変更しました。しかし、その巨大な文字列としてどのように私はそれを得るのですか?

ORA-19011: Character string buffer too small 
+0

CLOBが好きかもしれません。あるいは(正確に何をするかによって)RKARIM.PKG_SR_FUNCTIONS.REPORT_NETをリファクタリングして大きな文字列の代わりに参照カーソルを返す必要がありますか?結果を文字列にするために何らかの連結を行っているのかもしれないと思っていますか? – Boneist

答えて

0

は、まあ、私はあなたが32767個の文字にあなたのリターンが限られていることを参照してください。私は、このスクリプトを実行する場合は、My Oracle機能は私に、このエラーが表示されます。私はそれをClobに変更する(すでに提案されているように)。次のようなもの:

$ret = oci_new_descriptor($conn, OCI_D_LOB); 
oci_bind_by_name($parse,':RET', $ret, OCI_B_CLOB); 
関連する問題