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

Java原生查询SYS.USER_TABLES触发ORA-00903无效表名错误咨询

解决ORA-00903: invalid table name异常(查询USER_TABLES时)

嘿,你的问题根源一眼就能看出来——SQL语句里犯了个低级语法错误!看你写的这行代码:

StringBuilder sb = new StringBuilder("SELECT * from FROM SYS.USER_TABLES ");

这里连续写了两个from/FROM,Oracle解析的时候会把第一个from后面的内容当成表名,自然就抛出"invalid table name"的异常了。

给你两个关键的修正点:

  • 首先删掉重复的FROM,把SQL改成正确的写法:SELECT * FROM SYS.USER_TABLES(Oracle对SQL关键字大小写不敏感,from或者FROM用哪个都行)
  • 另外,既然你只需要获取表名,完全没必要查询所有列,直接指定table_name列更高效;而且USER_TABLES是当前用户的专属视图,不需要加SYS.前缀(它本来就返回当前schema下的所有表,加前缀反而多余)

修正后的代码示例:

StringBuilder sb = new StringBuilder("SELECT table_name FROM USER_TABLES");
Query query = em.createNativeQuery(sb.toString());
List<String> tableNames = query.getResultList();

这样执行就不会再出现语法错误了,而且能精准拿到你需要的当前schema下的所有表名。

内容的提问来源于stack exchange,提问作者Osama Al-far

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:30:30