PHP & Oracle - сбой привязки логического значения к вызову функции оракула через php

1

У меня есть функция 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'

Кажется, что я не привязываю логический логический путь. Применяется привязка к другим числовым параметрам. Только логическое значение этого не делает. Что мне не хватает?

  • 1
    Попробуйте добавить последний параметр в имя oci_bind_by_name. Вам нужно использовать константу SQLT_BOL для логических значений. По умолчанию он конвертирует все в SQLT_CHR. Также обратите внимание, что это работает только для Oracle 12c.
  • 0
    Я новичок в типах SQLT, но я не смог найти ничего представляющего логическое в документах PHP ...
Показать ещё 4 комментария
Теги:
plsql
boolean
oci

1 ответ

0
Лучший ответ

Похоже, что невозможно связывать логические данные с использованием менее Oracle 12c, как сказал в своем комментарии swstephe.

Вам нужно будет передать значение inline, например:

$ sql = "BEGIN: результат: = PRO_1.PKG_REGELELEMENT.internInsertData(28236,653,1,1, true, 123,42741); END;";

Или используйте SQLT_BOL, если вы можете использовать Oracle 12c или выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню