You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Glue脚本中PySpark连接Oracle用query选项报ORA-00911错误

问题分析与解决方案

错误原因:SQL语句格式问题

ORA-00911是Oracle返回的"无效字符"错误,你的问题核心在于SQL字符串的引号处理不当:

  • 原代码中dnb_level =''LVL1''的双单引号写法,在Python字符串中会被解析为额外的单引号,导致Oracle无法识别合法的字符串常量格式。
  • 即使是简单查询,若字符串定义时存在隐藏空格、换行或引号格式错误,也会触发同样的解析失败。

修复方案

1. 修正SQL字符串的引号转义

将var变量的定义改为以下两种正确格式之一:

# 用双引号包裹整个SQL,内部单引号直接使用
var = "select DNB_RESULTS_DTL_ID,REQUEST_ID,source_id,dnb_level from (select max(request_id) over(partition by org_code ) max_request_id,a.* from XXGMDMADM.MDM_DNB_RESULTS_DTL a where dnb_level = 'LVL1' and request_id in (131) ) where MAX_REQUEST_ID=request_id"

或者:

# 用单引号包裹SQL,内部单引号用反斜杠转义
var = 'select DNB_RESULTS_DTL_ID,REQUEST_ID,source_id,dnb_level from (select max(request_id) over(partition by org_code ) max_request_id,a.* from XXGMDMADM.MDM_DNB_RESULTS_DTL a where dnb_level = \'LVL1\' and request_id in (131) ) where MAX_REQUEST_ID=request_id'

2. 验证简单查询的正确性

测试用的简单查询需确保格式严谨,无多余字符:

var = "select DNB_RESULTS_DTL_ID,REQUEST_ID,source_id,dnb_level from XXGMDMADM.MDM_DNB_RESULTS_DTL"

关于query选项对Oracle的支持性

Spark JDBC的query选项对Oracle完全生效,它允许执行自定义SQL查询而非仅读取整张表。你的问题并非选项本身不兼容,而是SQL字符串格式错误导致Oracle解析失败,只要SQL语句符合Oracle语法规范,就能正常返回数据。

内容的提问来源于stack exchange,提问作者pbh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:06:45