Получение cx_ Oracle .InterfaceError: не исключение запроса при попытке запустить команду alter system - PullRequest
0 голосов
/ 26 мая 2020

Я получаю cx_Oracle.InterfaceError: not a query ошибку при попытке завершить все пользовательские сеансы для указанного пользователя.

import cx_Oracle

try:
    con = cx_Oracle.connect('username/password@someip/ora12c')
    cursor = con.cursor()

    result= cursor.execute("select USERNAME,SID,SERIAL#,COMMAND,STATUS from v$session where USERNAME='uname'")


    for session in result:
        query_string="ALTER SYSTEM KILL SESSION '@1,@2' IMMEDIATE".replace("@1",str(session[1])).replace("@2",str(session[2]))
        print(query_string)
        cursor.execute(query_string)
        con.commit()

except cx_Oracle.DatabaseError as e:
    print('Unable to kill user sessions, Subsequent steps may FAIL!!')
    print(e)

finally:
    if cursor: cursor.close()
    if con: con.close()

Выполняя приведенный выше код, я получаю:

ALTER SYSTEM KILL SESSION '1526,30533' IMMEDIATE
Traceback (most recent call last):
  File "oracleKillSession.py", line 10, in <module>
    for session in result:
cx_Oracle.InterfaceError: not a query

Я пробовал решения на PYSPARK: CX_ ORACLE .InterfaceError: не запрос , но это не помогло решить проблему. Пожалуйста, помогите.

1 Ответ

1 голос
/ 27 мая 2020

Вы не можете перебрать курсор (for session in result), а затем использовать тот же курсор для выполнения оператора. Для этого вам понадобится отдельный курсор, или вам нужно сначала извлечь все строки из курсора. Таким образом, для вас подойдет один из этих двух подходов:

Вариант 1:

alter_cursor = con.cursor()
for session in result:
    alter_cursor.execute(query_string)

Вариант 2:

results = cursor.fetchall()
for session in result:
    cursor.execute(query_string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...