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
相关产品推荐
相关产品推荐

