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

如何在Python中查看Oracle数据库的所有表列表?

解决Oracle数据库表列表无法查询的问题

嘿,我来帮你搞定这个问题~ 先看你代码里的小疏漏,再聊聊权限相关的坑:

首先,修复代码里的游标初始化问题

你直接调用cur.execute()但根本没创建游标对象啊!这会直接抛出错误,更别说查数据了。先补上这一步,还要记得获取查询结果才能打印出来:

import cx_Oracle
db_connection_string = 'username/passwort1@server:port/servername'
con = cx_Oracle.connect(db_connection_string)
print("Database version:", con.version)

# 关键:先从连接创建游标
cur = con.cursor()

# 执行查询后要获取结果
cur.execute("SELECT owner, table_name FROM dba_tables")
table_list = cur.fetchall()

# 遍历打印所有表
for owner, table_name in table_list:
    print(f"所属用户: {owner}, 表名: {table_name}")

# 用完记得关闭游标和连接
cur.close()
con.close()

然后,搞定dba_tables的权限问题

dba_tables是数据库级别的视图,只有拥有DBA权限的账号才能查询全部内容。如果你的账号是普通业务账号,要么会报错,要么返回空结果。给你两个更实用的替代选项:

  • 查当前用户自己的表:用user_tables,不需要额外权限,直接查自己创建的所有表:
    cur.execute("SELECT table_name FROM user_tables")
    
  • 查当前用户有权限访问的所有表:用all_tables,包含其他用户共享给你的表:
    cur.execute("SELECT owner, table_name FROM all_tables")
    

精准定位你要的表

如果Salesdata、Buyingdata是其他用户名下的表,你可以加过滤条件精准查询,比如假设这些表属于MARKET_USER:

cur.execute("SELECT table_name FROM all_tables WHERE owner = 'MARKET_USER' AND table_name IN ('SALESDATA', 'BUYINGDATA')")

注意Oracle的表名默认是大写的,所以查询时要对应上哦~

这样调整后,你就能顺利看到想要的表列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:57:36