簡體   English   中英

在 2 個關鍵字之間搜索存儲過程文件以解析所有 SQL

[英]Stored Procedure File search between 2 keywords to parse all SQL

我想在我的存儲過程代碼文件中搜索 2 個關鍵字(SELECT/INSERT/UPDATE/DELETE 和分號;),以使用 python 過濾文件中的所有 SQL 查詢。 1 選擇(甚至插入)可以有嵌套選擇,因此如果有任何選擇關鍵字,它應該繼續直到找到分號,而忽略其間的任何其他選擇/插入/刪除/更新關鍵字。

SQL 查詢可以是行首,也可以不是,它將是多行的。

select、insert、delete、update 關鍵字可以是大寫或小寫。

任何人都可以幫忙嗎?

我嘗試了拆分功能,但沒有奏效。

示例文本輸入文件:

create procedure get_user ( in p_user_id int unsigned) 
begin
   declare v_id int; 
   select ADDR_ID into v_id from address where ADDR_ID = v_user_id;  
   new_v_id=v_id+1 
   delete from address_2 where ADDR_ID = new_v_id;
   select * from address_2 
   where ADDR_ID in
   (Select ADDR_ID from address 
     where ADDR_ID = v_user_id);  
 end

所需輸出:

select ADDR_ID into v_id from address where ADDR_ID = v_user_id;  
delete from address_2 where ADDR_ID = new_v_id;
select * from address_2 where ADDR_ID in (Select ADDR_ID from address where ADDR_ID = v_user_id);

參考鏈接並解決了這個問題。

如何從 Python 文件中提取兩個子字符串之間的文本

import re

start = ['SELECT','select','DELETE','delete','INSERT','insert','UPDATE','update']
end = ';'

for i in start:
    rx = r'{}.*?{}'.format(re.escape(i), re.escape(end)) # Escape special chars, build pattern dynamically
    with open('sp.txt') as myfile:
        copy = False
        contents = myfile.read()                     # Read file into a variable
        for match in re.findall(rx, contents, re.S): # Note re.S will make . match line breaks, too
            # Process each match individually
            print (match)

暫無
暫無

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

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