Ошибка в модуле sqlparse в python с синтаксисом хранимых процедур
Я пытаюсь использовать метод split в модуле sqlparse, чтобы разделить файл запросов на список запросов. Когда я использую запрос "создать процедуру", он корректно разделяется. Но когда я использую "процедуру замены", она разделяет один запрос на два. Он разделяется точкой с запятой и игнорирует начало и конец.
import sqlparse
from sqlparse.keywords import *
query = """REPLACE PROCEDURE u1.SP_Employee (
IN EmpNo INTEGER, IN EmpName INTEGER
)
BEGIN
INSERT INTO u1.employee (
EmpNo,
EmpName
)
VALUES (
:EmpNo,
:EmpName
);
END;
"""
sql_formats = sqlparse.format(query,strip_comments=True, reindent=True)
result = sqlparse.parse(query)
for i in range(0,len(result)) :
print("index is "+str(i))
print(result[i])
print("Result printing is done for replace query")
query = """create PROCEDURE u1.SP_Employee (
IN EmpNo INTEGER, IN EmpName INTEGER
)
BEGIN
INSERT INTO u1.employee (
EmpNo,
EmpName
)
VALUES (
:EmpNo,
:EmpName
);
END;
"""
sql_formats = sqlparse.format(query,strip_comments=True, reindent=True)
result = sqlparse.parse(query)
for i in range(0,len(result)) :
print("index is `enter code here`"+str(i))
print(result[i])
print("Result printing is done for create query")
**Output :-**
index is 0
REPLACE PROCEDURE u1.SP_Employee (
IN EmpNo INTEGER, IN EmpName INTEGER
)
BEGIN
INSERT INTO u1.employee (
EmpNo,
EmpName
)
VALUES (
:EmpNo,
:EmpName
);
index is 1
END;
index is 2
Result printing is done for replace query
index is 0
create PROCEDURE u1.SP_Employee (
IN EmpNo INTEGER, IN EmpName INTEGER
)
BEGIN
INSERT INTO u1.employee (
EmpNo,
EmpName
)
VALUES (
:EmpNo,
:EmpName
);
END;
index is 1
Result printing is done for create query
1 ответ
sqlparse в настоящее время поддерживает CREATE
а также CREATE OR REPLACE
Вы можете отредактировать https://github.com/andialbrecht/sqlparse/blob/3013ef4826ce8f7bf46c450debe816c9fcae2a05/sqlparse/keywords.py и / или отправить отчет об ошибке, указывающий, какую БД вы используете.