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