验证特定SQL表的列是否存在于给定的选择SQL查询(Oracle)中,使用Python并且无法访问数据库[关闭]

ffx8fchx  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(87)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

23天前关闭
Improve this question
给定一个SQL查询(Oracle),我想知道特定表的列是否存在于其中。我想用Python来实现这一点。我没有任何访问数据库的权限,我需要这个用于分析目的。
我曾考虑过使用正则表达式,但我认为它可能会导致错误,并且有可能从复杂的SQL查询中得到错误的结果
所以我尝试使用sqlglot(sqlparser)库,并能够分别提取列和表名。但是我想像在Table_name.Columns中那样查找列,即使表名或列名有别名,也应该能够找到。
实现这一目标的最有效方法是什么?

jhiyze9q

jhiyze9q1#

一般来说,如果不能访问数据库,这是不可能的。
在某些列没有别名的情况下编写SQL语句是完全法律的

SELECT col1, col2, col3
  FROM parent p
       join child c on (c.parent_id = p.parent_id)
 WHERE p.parent_id = 12345;

如果不能访问数据库,就无法确定col1col2col3是来自parent表还是child表(或者两者都有,在这种情况下会抛出语法错误)。
当你有类似的问题时,

SELECT a.b( 123 )

其中a可以是模式名,b是该模式中的函数,或者a可以是包名,b是该包中的函数(如果您利用数据库并使用对象类型之类的东西来创建更多可能的解释,这只会变得更加复杂)。

相关问题