cx_Oracle 有多个 SQL 请求?
Multiple SQL request on cx_Oracle?
我使用 cx_Oracle Oracle 数据库的 Python 接口。
在同一个查询中,我必须:
- 将会话更改为 CDB 容器
- 执行 SQL 请求
这是我的代码:
Query = f"""ALTER SESSION SET CONTAINER=cdb$root;
select RESOURCE_NAME as "Parametre",
MAX_UTILIZATION as "Valeur courrante",
LIMIT_VALUE as "Valeur limite",
decode( nvl( MAX_UTILIZATION, 0),0, 0, ceil ( ( MAX_UTILIZATION / LIMIT_VALUE) * 100) ) as "Pourcentage utilise"
from v$resource_limit
where RESOURCE_NAME in ('sessions','processes')
and decode( nvl( MAX_UTILIZATION, 0),0, 0, ceil ( ( MAX_UTILIZATION / LIMIT_VALUE) * 100) ) > {seuil_max_occupation_param}"""
SQL_Query = pd.read_sql_query(Query,conn)
但此代码出现 Oracle 错误:
ORA-00922: option erronee ou absente
例如,这组请求在 SQLPlus 上运行良好。
我有语法问题,但哪一个?
非常感谢。
最好的祝福。
西奥
所有 Oracle API 一次执行一个 语句 。来自 documentation:
cx_Oracle can be used to execute individual statements, one at a time. It does not read SQL*Plus “.sql” files.
您需要多次调用 execute()
,首先传递 ALTER,然后传递 SELECT。您需要为这两个呼叫使用相同的连接。
或者,您可以将 SQL 调用包装在 PL/SQL 块中(以及 return 和 REF CURSOR or Implicit Result Set)。
我使用 cx_Oracle Oracle 数据库的 Python 接口。
在同一个查询中,我必须:
- 将会话更改为 CDB 容器
- 执行 SQL 请求
这是我的代码:
Query = f"""ALTER SESSION SET CONTAINER=cdb$root;
select RESOURCE_NAME as "Parametre",
MAX_UTILIZATION as "Valeur courrante",
LIMIT_VALUE as "Valeur limite",
decode( nvl( MAX_UTILIZATION, 0),0, 0, ceil ( ( MAX_UTILIZATION / LIMIT_VALUE) * 100) ) as "Pourcentage utilise"
from v$resource_limit
where RESOURCE_NAME in ('sessions','processes')
and decode( nvl( MAX_UTILIZATION, 0),0, 0, ceil ( ( MAX_UTILIZATION / LIMIT_VALUE) * 100) ) > {seuil_max_occupation_param}"""
SQL_Query = pd.read_sql_query(Query,conn)
但此代码出现 Oracle 错误:
ORA-00922: option erronee ou absente
例如,这组请求在 SQLPlus 上运行良好。 我有语法问题,但哪一个? 非常感谢。 最好的祝福。 西奥
所有 Oracle API 一次执行一个 语句 。来自 documentation:
cx_Oracle can be used to execute individual statements, one at a time. It does not read SQL*Plus “.sql” files.
您需要多次调用 execute()
,首先传递 ALTER,然后传递 SELECT。您需要为这两个呼叫使用相同的连接。
或者,您可以将 SQL 调用包装在 PL/SQL 块中(以及 return 和 REF CURSOR or Implicit Result Set)。