(Oracle ,delphi)我想做一个Sql的解释器,分析一个SQL语句里有哪些表,
对一些简单的sql(例1,2) 可以很容易得出,但对于一些很复杂的sql(例3)
就难了,有哪位高手写过这样的通用的分析? 例1:
SELECT A.F_BARCODE,B.F_COUNT
FROM TCOMMODITY A , TEXPORTCONTENT B
WHERE A.F_BARCODE=B.F_BARCODE
AND A.F_BARCODE>'02'
含有表 TCOMMODITY , TEXPORTCONTENT例2:
SELECT * FROM TIMPORTBILL
含有表 TIMPORTBILL
例3:SELECT T.* ,Z.*,K.*
FROM
(
SELECT A.F_BARCODE,B.F_COUNT
FROM TCOMMODITY A , TEXPORTCONTENT B
WHERE A.F_BARCODE=B.F_BARCODE
AND A.F_BARCODE>'02'
) ,
( SELECT F_DF FROM TDDC
)B,TIMPORT C, TEXPORT D,
( SELECT FROM TBIL ) K
WHERE ....含有表:TCOMMODITY , TEXPORTCONTENT,TDDC,TIMPORT TEXPORT,TBIL
对一些简单的sql(例1,2) 可以很容易得出,但对于一些很复杂的sql(例3)
就难了,有哪位高手写过这样的通用的分析? 例1:
SELECT A.F_BARCODE,B.F_COUNT
FROM TCOMMODITY A , TEXPORTCONTENT B
WHERE A.F_BARCODE=B.F_BARCODE
AND A.F_BARCODE>'02'
含有表 TCOMMODITY , TEXPORTCONTENT例2:
SELECT * FROM TIMPORTBILL
含有表 TIMPORTBILL
例3:SELECT T.* ,Z.*,K.*
FROM
(
SELECT A.F_BARCODE,B.F_COUNT
FROM TCOMMODITY A , TEXPORTCONTENT B
WHERE A.F_BARCODE=B.F_BARCODE
AND A.F_BARCODE>'02'
) ,
( SELECT F_DF FROM TDDC
)B,TIMPORT C, TEXPORT D,
( SELECT FROM TBIL ) K
WHERE ....含有表:TCOMMODITY , TEXPORTCONTENT,TDDC,TIMPORT TEXPORT,TBIL
Delphi MIDAS 的重大BUG / 李颖 function TQuery.PSGetTableName: string;
begin
Result := GetTableNameFromSQL(SQL.Text);
end;
其中GetTableNameFromSQL定义在DBCommon.pas中,各位,这下发现宝贝了!!!!
这个单元里包括一些SQL语法分析程序,定义相当完备,
比如这个GetTableNameFromSQL函数分析一段SQL语句的目标表名,
只用了20行就搞定了,是不是很厉害??这个单元没有包括在Delphi Help中,也不算很复杂,interface部分只有230行左右
快去看看吧,肯定有收获
是单表的,多表的不行.有高手吗?
aaa a,bbb b,ccc c where ....;
2\查询空格符,判断空格后面的单词是否是where/group/order,如果是则去掉尾,那么就得到如下:
aaa a,bbb b,ccc c
3\查询逗号得出表的数组!!!