java—如何在sql查询中查找表/视图名称和相应的投影列名

ppcbkaq5  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(515)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

10个月前关门了。
改进这个问题
我们正在构建一个应用程序,用户在其中选择数据源并构建sql
使用sql查询生成器或
将现有sql粘贴到应用程序中。
此应用程序的一个要求是获取一些表/视图列属性,包括数据类型和大小、精度等。如果用户使用选项#1 sql query builder,则我们将通过从数据库中自省来了解列属性;但是,如果用户选择选项#2,即粘贴现有sql,那么我们需要解析sql,然后找出所有select(投影)列所需的属性。问题是,如何实现以下目标:
从粘贴的sql中找出表/视图和相应的投影列名。
我们在后端使用java,并且更喜欢java库,但是如果java中不存在其他语言库,我们也会对它们开放,以实现上述两个功能。从这里,我看到有几个库,但我不知道这些库/工具中有哪些可以帮助获取表/视图名称和相应的列名,以便我可以内省数据库并找到所需的属性。
尽管我们的应用程序适用于所有数据库,但目前,我们的客户使用mysql和oracle。因此,库现在应该能够解析这两个数据库。
我意识到我可以使用antlr为mysql和oracle构建一个解析器,但是我不知道为实际的sql构建一个解析器需要多少时间。
如果你能给我指点一下哪种方法,工具会更快的达到目标。
如果有帮助的话,我们的前端是react,后端是java。

llew8vvj

llew8vvj1#

有两种标准方法:
1使用dbms\ U sql.parse+dbms\ U sql.descripe\列:https://www.got-it.ai/solutions/sqlquerychat/sql-help/others/dbms_sql-basics-describe_columns-method/
2执行“解释计划”并从计划表中选择:

explain plan SET STATEMENT_ID = 'PLAN1' for select * from dual;

select object_type, object_owner, object_name, projection, search_columns, access_predicates, filter_predicates
from plan_table 
where statement_id='PLAN1'
and object_type is not null;

显然,您可以将这些方法和所有表/所有表/列结合起来。
如果您还需要分析使用过的用户视图及其源代码,可以使用dbms\u实用程序。展开\u sql\u文本:https://oracle-base.com/articles/12c/expand-sql-text-12cr1

相关问题