У меня есть функция oracle, которую я пытаюсь получить через php:
FUNCTION internInsertData( RefId IN NUMBER, nProjektId IN NUMBER, nKeepMaster IN NUMBER, Position IN NUMBER,CheckPosition IN BOOLEAN, TeilanlageId IN NUMBER, TAElementId IN NUMBER)
Эта функция нуждается в логическом параметре "CheckPosition", который, кажется, вызывает ошибку при привязке значения с использованием переменной к ней.
Когда я запускаю
$result="";
$sql ="BEGIN :result := PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1,true,123,42741); END;";
$stmt = oci_parse($this->oracle->getConnection(), $sql);
oci_bind_by_name($stmt, ":result", $result,12345);
oci_execute($stmt);
все работает нормально.
Я хочу передать значения путем привязки.
Но когда я связываю логическую переменную с вызовом, она не выполняется:
$booli = true;
$result="";
$sql ="BEGIN :result := PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1,:booli,123,42741); END;";
$stmt = oci_parse($this->oracle->getConnection(), $sql);
oci_bind_by_name($stmt, ":result", $result,12345);
oci_bind_by_name($stmt, ":booli", $booli,12345);
oci_execute($stmt);
Это вызывает предупреждение, и PL/SQL-скрипт останавливается:
PLS-00306: неправильное количество или типы аргументов при вызове 'INTERNINSERTDATA'
Кажется, что я не привязываю логический логический путь. Применяется привязка к другим числовым параметрам. Только логическое значение этого не делает. Что мне не хватает?
Похоже, что невозможно связывать логические данные с использованием менее Oracle 12c, как сказал в своем комментарии swstephe.
Вам нужно будет передать значение inline, например:
$ sql = "BEGIN: результат: = PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1, true, 123,42741); END;";
Или используйте SQLT_BOL, если вы можете использовать Oracle 12c или выше.