簡體   English   中英

從任何“SQL 查詢”字符串中提取列名和表名

[英]extract column names and table name from any “SQL query” String

考慮我有一個這樣的 SQL 查詢:

SELECT c_mandant, 
    hist_datum, 
    parkey1, 
    parkey2, 
    funktionscode, 
    ma_parkey, 
    me_parkey , 
    CASE 
        WHEN EXISTS 
            ( 
           SELECT 1 
           FROM   cds_h_gruppe GRP1 
           WHERE  grp1.c_mandant = c_mandant 
           AND    grp1.hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)
           AND    grp1.funktionscode = 'H' 
           AND    grp1.parkey1 = ma_parkey
       ) THEN 1 
        ELSE NULL 
    END ma_me , 
    CASE 
        WHEN EXISTS 
            ( 
           SELECT 1 
           FROM   cds_h_gruppe GRP2 
           WHERE  grp2.c_mandant = c_mandant 
           AND    grp2.hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)
           AND    grp2.funktionscode = 'U' 
           AND    grp2.parkey1 = me_parkey
       ) THEN 1 
        ELSE NULL 
    END me_ma,
    Row_number() OVER (partition BY c_mandant, ma_parkey, me_parkey ORDER BY c_mandant, ma_parkey, me_parkey) anz_ma
FROM     
( 
     SELECT c_mandant, 
     hist_datum, 
     parkey1, 
     parkey2, 
     funktionscode , 
     CASE 
       WHEN funktionscode = 'U' THEN parkey1 
       ELSE parkey2 
     END ma_parkey , 
     CASE 
       WHEN funktionscode = 'U' THEN NULL 
       ELSE parkey1 
     END me_parkey 
     FROM   cds_h_gruppe 
     WHERE  funktionscode IN ('U', 
             'H') 
     AND    hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)

我想從查詢中提取表名和列名。 結果應該看起來像

表格:

CDS_H_GRUPPE

列:

CDS_H_GRUPPE.c_mandant    
CDS_H_GRUPPE.funktionscode    
CDS_H_GRUPPE.hist_datum    
CDS_H_GRUPPE.parkey1 
CDS_H_GRUPPE.parkey2

我可以從任何對 Oracle、SQL Server 或 DB2 有效的復雜查詢字符串中提取列名和表名嗎?

不要嘗試自己解析它,使用 SQL 解析器。 顯然,實體框架曾經有一個,但現在沒有了。 似乎有幾個,比如這一個從反諷項目。

有一個商業解析器,你可以花 900 美元獲得(如果你想分發你的代碼,則需要 1,900 美元)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM