Я не смог найти ответы на эту проблему здесь, в документации по PHP или в Google.
У меня есть следующий фрагмент кода PHP:
if (!empty($bind_vars)) {
$vars = array_keys($bind_vars);
for ($i=0; $i < count($bind_vars); $i++) {
oci_bind_by_name($statement, $vars[$i], $bind_vars[$vars[$i]], 100);
}
}
bind_vars это массив, содержащий переменные связывания. оператор является оператором Oracle, результатом oci_parse для SQL-запроса, содержащего следующий код PL / SQL (для целей тестирования):
for r_t in c_t loop
if c_p.param = 'TEST1' then
:TEST1 := r_t.val;
else
:TEST2 := r_t.val;
end if;
end loop;
Это приводит к ситуации, когда один изПеременные связывания получают результат, другая получает 65535 пустых строк.
Я обнаружил это в PHP-документации ( oci_bind_by_name ):
Вызов привязки сообщает Oracle, с какого адреса памяти считывать данные.Для привязок IN этот адрес должен содержать действительные данные при вызове oci_execute ().Это означает, что связанная переменная должна оставаться в области действия до выполнения.Если этого не произойдет, могут возникнуть непредвиденные результаты или ошибки, такие как «ORA-01460: запрошено невыполненное или необоснованное преобразование».Для привязок OUT одним признаком является отсутствие значения в переменной PHP.
Мой вопрос: почему выходной параметр не является нулевым значением или пустой строкой указанной максимальной длины (100)?Почему 65535?Есть ли способ изменить это?
Я запустил это на PHP 7.1.25 и PHP 5.6.30.Версия Oracle - 12c Standard Edition.