Getting cx_Oracle.InterfaceError: not a query exception while trying to run alter system command
Getting cx_Oracle.InterfaceError: not a query exception while trying to run alter system command
我在尝试结束指定用户的所有用户会话时遇到 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
我尝试了 中的解决方案,但这对解决问题没有帮助。请帮忙。
您不能遍历游标 (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)
我在尝试结束指定用户的所有用户会话时遇到 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
我尝试了
您不能遍历游标 (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)