-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ 功能建议 ] 建议支持解析运行Oracle下PLSQL执行块功能 #327
Comments
感谢你的反馈, 目前 oracle 的语法解析是用的 sqlparse Lines 210 to 220 in 621eb6c
可以看到是简单的直接split , 在执行的时候也是这样简单的split , 所以会造成执行失败. 如果要支持 PLSQL , 可以仿照 sql server 使用正则表达式分割语句, 然后所有其他语句都作为一整块运行. Lines 162 to 174 in 621eb6c
如果有能力的话可以直接改代码提pr , 只要流程没大问题, 单元测试全过就会接受. 但是说实话, 你提供的这种程度复杂度( 有两层嵌套 )的语句, 正则表达匹配会比较累, 实现起来难度较大, 还请量力而行. |
@LeoQuote 了解,我提的方式只是一个举例,确实复杂些。 |
这个平台的 定义, sql 查询 和上线 ,上面说的2个功能 感觉已经高于 这个定义了。 |
@yzypals 确实,我这已经不仅仅作为SQL上线管理使用,在线数据运维也打算纳入到本平台。 |
这个不是cx_oracle做的,你看一下execute方法的逻辑是有切分的,你可以把那一段代码改了 |
这个功能缺的是oracle sql 解析 这一块 , 现在用的sqlparse ,不确定能不能很好的支持解析begin 这种句法, 后面会考虑做,应该我们公司要求支持分开分表, 就需要更好的去解析语法了,顺便就把begin 这部分做了。 就是 时间跨度上会比较久。最近事情多 , 没太多精力弄这个。 |
#688 |
是的,目前的功能可以提交并执行psql的执行块(匿名块),但是有个小问题要注意,执行块如果没有合适的异常处理并抛出,执行完之后不好判断成功与否。
目前的建议是在执行块中加入日志表并记录执行信息,便于结果追查
发自我的iPhone
…------------------ 原始邮件 ------------------
发件人: 小圈圈 <notifications@github.com>
发送时间: 2020年3月28日 09:43
收件人: hhyo/Archery <Archery@noreply.github.com>
抄送: ericruan-cn <330518878@qq.com>, Author <author@noreply.github.com>
主题: 回复:[hhyo/Archery] [ 功能建议 ] 建议支持解析运行Oracle下PLSQL执行块功能 (#327)
#688
这个是不是也在PR里面搞定了
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
已支持 |
目前遇到的问题/使用障碍
(1) 无法创建和替换 函数、过程、包
(2) 无法执行PLSQL执行块
以上两点在SQL解析时就不支持,具体SQL解析如下:
希望如何解决/实现它
(1) 定义PLSQL执行块的 开始与结束的声明,根据该声明来识别出PLSQL执行块,例如:
/* PLSQL BEGIN */
/* PLSQL END */
(2) 识别出的PLSQL执行块,再根据符号(/)来详细分割更小的可执行块。每一个执行块是一个可执行语句。
举例
/* PLSQL BEGIN */
declare
begin
end
/
declare
begin
end
/
/* PLSQL END */
The text was updated successfully, but these errors were encountered: