2011-09-15 23 views
1

SQLクエリでユーザー定義関数を一意に識別できるregular expressionが必要です。例えばSQLでユーザー定義関数を抽出する正規表現

with someExp(parameter) 
as 
(
select parameter = convert(varchar(8000),'welcome') 
union all 
select parameter + 'user' from someExp where lengthOfPara(parameter) < 100 
) 
select parameter from someExp 
order by parameter 

正規表現を一意機能convert and lengthOfPara両方を識別すべきです。

ありがとうございます。

+0

不可能... –

+0

正規表現からあまりにも多くのことを聞いています。また、私がよく知っているほとんどのSQLフレーバでは、 'convert'はユーザ定義の関数ではありません(組み込み関数です)。 – NPE

+0

ここで言及されているようなSQLパーサーを考えてみてください。http://stackoverflow.com/questions/660609/sql-parser-library-for-java – Asaf

答えて

3

これはできません。 SQL問合せは正規表現では記述されていないため、正規表現を使用してこのように任意の構文を分離することはできません。

0

Regexはコンテキストを意識していないため、SQLクエリーで動作していることはわかりません。正規表現に関する限り、それは単純なテキストです。

そして、この例では、例ではsomeExp(parameter)varchar(8000)のように、単語と角括弧で構成される別の構造とは別の機能を識別する方法はありません。

0

編集:申し訳ありませんが、私は質問を誤解しました。無関係な部分を削除する

他の人が言っているように、正規表現は機能しません。

完全なSQL文法を持つ言語パーサー(Bisonなど)を使用して検出できます。