Я связываю строковую переменную ($xml
) в PHP, который является частью вызова процедуры в Oracle 12c, теперь данные для CLOB
довольно большой, есть ли простой способ это исправить?
Я проверил загрузку с гораздо меньшим файлом, и все отлично работает, проблема только с большими файлами.
я пробовал XMLTYPE
а также RAW
на месте CLOB
но ни один, казалось, не работал.
PHP
public function uploadXml($xml, $fileName)
{
$query = 'BEGIN XML_PKG.PR_LOAD_XML_FILE (
i_XML_DOC => :i_XML_DOC,
i_FILENAME => :i_FILENAME
);
END;';
$stmt = $this->connection->prepare($query);
$bindVars = array('i_XML_DOC' => $xml
, 'i_FILENAME' => $fileName
);
$stmt->execute($bindVars);
}
SQL
PROCEDURE PR_LOAD_XML_FILE (
i_XML_DOC IN CLOB,
i_FILENAME IN XML_DOCS.FILENAME%TYPE
);
ошибка
ORA-01460: unimplemented or unreasonable conversion requested
Вам нужно использовать дескриптор
$descriptor = oci_new_descriptor($db->getConnection(), OCI_DTYPE_LOB);
$descriptor->writetemporary($xml, OCI_TEMP_CLOB);
$stmt->bindParam(':V_XML', $descriptor, OCI_B_CLOB, -1);
Других решений пока нет …