2015-10-21 39 views
0

我有一個文件包含大量的SQL,包括一些存儲過程。我只想提取存儲過程。 SQL可能看起來像下面的正則表達式匹配從模式直到另一個模式

SHOW PROCEDURE SECADMIN.NewTUTRMU_User_new    ; 

    3 Rows returned. DBS time = 00:00:00 

    RequestText 
    REPLACE PROCEDURE SecAdmin.NewTUTRMU_User_new 
        (
        IN UserName  VARCHAR(128), 
        IN SARNumber  VARCHAR(10),     

        ) 
    /* 
    come comments              

    */ 

    BEGIN 

    DECLARE emOwnerDeptI VARCHAR(20); 

    SEL SUBSTRING(:UserName FROM 8) INTO :GDWUserid; 

    CALL DBC.SysExecSql(' 
    CREATE USER '||:UserName||' ... 
... 
... 
END; 

... 
Then some more SQL and then another stored procedure definition 
... 

SHOW PROCEDURE SECADMIN.ReInstateUser_new    ; 

3 Rows returned. DBS time = 00:00:00 

RequestText 
REPLACE PROCEDURE SECADMIN.ReInstateUser_new 
        ( 

        IN UserName VARCHAR(128) 
        --Must be full employee ID including leading 0's 
        ,IN Empl_I VARCHAR(12), 
            IN Task_Num) 

/* 
    MODIFICATION HISTORY: 
    */ 

BEGIN    

    DECLARE newPassword VARCHAR(20); 
... 
... 
END; 
... 
... 

我想出了以下正則表達式,它不起作用,並匹配文本,直到它找到一個分號。

REPLACE PROCEDURE.*[^;]*; 

我需要一個匹配從REPLACE PROCEDURE到END的正則表達式的正則表達式;

請建議。

+0

看看現在 –

回答

1

根據所提供的例子,我認爲這將做到這一點:/REPLACE PROCEDURE [\w\W]+?END;/g

下面是測試:http://refiddle.com/refiddles/5626e70d75622d65a0250000

+0

這並不解決問題。它只會將選擇減少到不是要求的塊註釋的開始。 – Ali

+0

你是絕對正確的我忘記了如何存儲過程看起來O.O給我幾分鐘。 –

+0

heh。不,我猜我不:/我之前有過,我沒有嘗試過。你是對的。 –