Глядя на источники существующего парсера:
Я смотрю на источников парсер . Он может анализировать таблицы по крайней мере в следующих контекстах:
Оператор SELECT:
FROM
(будьте осторожны, здесь есть список через запятую: FROM a, b, c
вполне возможно) (LEFT, RIGHT, FULL, CROSS) (NATURAL) (INNER, OUTER) JOIN
Предостережения:
- Ссылки на таблицы в
FROM
могут быть производными таблицами - Таблица ссылки в
FROM
могут быть общими табличными выражениями (из предложения WITH
)
Оператор INSERT:
INTO
(хотя в Teradata это необязательно) INSERT
или INS
(Teradata поддерживает INS
в качестве псевдонима для INSERT
)
Оператор UPDATE:
UPDATE
или UPD
(Teradata поддерживает UPD
в качестве псевдонима для UPDATE
)
Оператор DELETE:
FROM
(но ключевое слово необязательно) DELETE
или DEL
(Teradata поддерживает DEL
в качестве псевдонима для DELETE
)
Оператор MERGE:
INTO
(необязательно) * 10 81 * MERGE
USING
Заявления DDL:
Не забудьте:
TRUNCATE
(TABLE
) CREATE TABLE
CREATE VIEW
ALTER TABLE
ALTER VIEW
DROP TABLE
DROP VIEW
COMMENT ON TABLE
COMMENT ON VIEW
CREATE INDEX
(ON
предложение ) GRANT
(предложение ON
или ON TABLE
) REVOKE
(предложение FROM
или FROM TABLE
)
Использование существующий синтаксический анализатор для сценария этого:
Если опция Java является опцией, то вы можете использовать парсер jOOQ , запустить все сценарии через него, заново сгенерировать SQL и подключить VisitListener
, чтобы собрать все таблицы. Примерно так:
DSLContext ctx = DSL.using(SQLDialect.TERADATA);
ctx.configuration().set(new DefaultVisitListener() {
@Override
public void visitStart(VisitContext ctx) {
if (ctx.queryPart() instanceof Table)
System.out.println(ctx.queryPart());
}
});
// The toString() call will trigger a re-generation which passes through the VisitListener
ctx.parser().parse(allSQL).toString();
Хотя jOOQ требует коммерческую лицензию для TERADATA
, вы можете использовать бесплатное Open Source Edition для этой конкретной задачи, так как анализатор Open Source Edition поддерживает практически весь синтаксис .
Отказ от ответственности: я работаю в компании, работающей над jOOQ.