У меня есть функция оракула, что я пытаюсь получить доступ через 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 в своем комментарии.
Вам нужно будет передать значение в строке, как это:
$ sql = «BEGIN: результат: = PRO_1.PKG_REGELELEMENT.internInsertData (28236 653,1,1,
правда,123,42741); КОНЕЦ;»;
Или используйте SQLT_BOL, если вы можете использовать Oracle 12c или выше.
Других решений пока нет …