Выполнение скрипта с помощью функции callproc из модуля cx_Oracle в python 2.7.5

Я относительно новичок в Python. В настоящее время я работаю над выполнением операторов SQL в Oracle DB.

Когда я выполняю запрос:

query = 'select * from table' 
cursor.execute(query)
result = cursor.fetchall()

все идет нормально, но когда я пытаюсь выполнить скрипт:

сценарий в виде простого текста:

begin
 SIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');
end;
/

код из скрипта

script = "begin\nSIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');\nend;"
cursor.execute(script)

result = cursor.fetchall()

Я получаю исключение, что это не запрос, но все же этот скрипт сработал.

Итак, из того, что я гуглил, похоже, я должен использовать функцию callproc:

cursor.callproc['SIEBEL_DBA.X_DR_DEPLOY',{'id' : '1-4NANEI', 'env_code' : 'SVE_SIT'}]
connection.commit()

result = cursor.fetchall()

Когда я выполняю этот оператор, я также получаю исключение, но на этот раз в БД ничего не изменилось:

Объект 'builtin_function_or_method' не имеет атрибута 'getitem'

Может ли кто-нибудь указать, где я не прав, и как мне изменить оператор, чтобы он работал.

Заранее огромное спасибо!

РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ:

Я был разочарован синтаксисом и сложностью функций callproc и callfunc. Я нашел хороший ресурс: http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/#part1 по этой ссылке я нашел всю необходимую информацию и примеры работы с библиотекой cx_Oracle.

в конце мне просто нужно было немного изменить мой код:

cursor.callproc('SIEBEL_DBA.X_DR_DEPLOY', ['1-4NANEI', 'SVE_SIT'])

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


person user2768632    schedule 31.01.2014    source источник
comment
Я был разочарован синтаксисом и сложностью функций callproc и callfunc.   -  person user2768632    schedule 03.02.2014


Ответы (1)


Исключением является то, что вы используете [ ] вместо ():

cursor.callproc('SIEBEL_DBA.X_DR_DEPLOY',{'id' : '1-4NANEI', 'env_code' : 'SVE_SIT'})

Имейте в виду, что тип возвращаемого значения является обязательным:

Cursor.calfunc (имя, тип возврата, параметры = [], параметры ключевого слова = {})

Вызвать функцию с заданным именем. Тип возвращаемого значения указывается в той же нотации, что и для setinputsizes(). Последовательность параметров должна содержать по одной записи для каждого аргумента, ожидаемого функцией. Любые параметры ключевого слова будут включены после позиционных параметров. Результатом вызова является возвращаемое значение функции.

person Burhan Khalid    schedule 31.01.2014
comment
Спасибо за ваш вклад, это немного прояснило мои мысли, но не полностью! Я добавил разрешение в свой первый пост, а также ресурс, который я прочитал, чтобы исправить это. - person user2768632; 03.02.2014