Как вызвать функцию API Oracle в Python 3.4 с помощью cx_Oracle?

Новое для Oracle и Python. У меня есть API в базе данных Oracle, в которой есть функция Part_Exist, которая проверяет, существует ли часть, и возвращает 1 для истинного, 0 для ложного:

FUNCTION Part_Exist (
   contract_        IN  VARCHAR2,
   part_no_         IN  VARCHAR2 ) RETURN NUMBER
IS
BEGIN
   IF Check_Exist___(contract_, part_no_) THEN
      RETURN 1;
   ELSE
      RETURN 0;
   END IF;
END Part_Exist;

Затем я пытаюсь выполнить эту функцию в Python, используя курсор соединения cx_Oracle:

cursor.execute('INVENTORY_PART_API.PART_EXIST', ['100', '05945'])

Я пробовал cursor.callproc ранее, но поскольку это функция, а не процедура, я подумал, что cursor.execute будет правильным.

Я продолжаю получать эту трассировку:

cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

Я пробовал форматировать входы по-разному, но безуспешно. Раньше я использовал cursor.callproc с хорошими результатами. Вход приветствуется!


person Community    schedule 27.08.2015    source источник


Ответы (1)


Ответ найден здесь: http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/

В основном мне приходилось использовать cursor.callfunc, а не .execute или .callproc...

        return_no = cursor.var(cx_Oracle.NUMBER)
        cursor.callfunc('INVENTORY_PART_API.Part_Exist', return_no, ['100', '05945'])
        number = return_no.getvalue()
person Community    schedule 27.08.2015