[英]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);
參考鏈接並解決了這個問題。
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.