Выполните Oracle хранимых процедур с Symfony & doctrine - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь выполнить хранимые процедуры в базе данных Oracle:

x_pkg.get_xID

Требуется один ввод и будет выводиться одна строка

Я уже пробовал несколько различных вариантов, которые Я нашел в inte rnet:

$val = 'DATABASE';
$result = new ResultSetMapping ();

$query  = $entityManager -> createNativeQuery ("BEGIN x_pkg.get_xID(${val}, :cursor); END;", $result);

В этом случае я получаю ошибку: ORA-01008: не все переменные связаны (500 Внутренняя ошибка сервера)

$query = $entityManager -> createNativeQuery ("CALL x_pkg.get_xID(:data)", $result);
$query -> setParameters (['data' => $val]);

В этом случае Я получаю ошибку: ORA-06553: PLS-306: неверный номер или типы аргументов при вызове «GET_XID» (500 Внутренняя ошибка сервера)

$query = $entityManager -> createNativeQuery ("CALL x_pkg.get_xID(${val})", $result);

В этом случае я получаю ошибку: ORA-06576: недопустимое имя функции или процедуры (500 Internal Server Error)

Спасибо за помощь.

1 Ответ

0 голосов
/ 20 апреля 2020

Я могу помочь вам объяснить, почему вы получаете эти ошибки, и тогда это может помочь вам найти решение для решения проблемы,

И просто учтите, что база данных Oracle немного сложна и отличается от других используемых сообществом баз данных, таких как MySQL, у него есть своя сила и строгие правила,

** Я объясню первый случай в конце. *

Итак, в Во втором случае вы получаете эту ошибку, потому что Oracle ожидают, что переменная OUT будет частью вашего Call , что не так в вашем коде, и потому что это внутри процедуры

В третьем случае использование $ {val} недопустимо, даже если оно действительно для самого PHP, база данных Oracle видит это по-другому, так что это не так вариант для вас,

Теперь о первом случае, вы должны убедиться, что ваша процедура возвращает курсор , а не переменную, я думаю, вы должны проверить это в вашем Oracle базы данных, а также в следующей строке кода, где вы выполняете Ваш запрос (он не размещен здесь, поэтому я не уверен в этом), это сложная часть Oracle базы данных, вы должны убедиться, что ваша процедура возвращает, чтобы избежать ошибки,

И удачи :) 1021 *

...