0

我应该先声明我是一个完整的 Python 新手,但我需要完成一项任务:(

我已经安装了 python 脚本插件并阅读了它是如何工作的。但是我有很大的问题要理解我必须编程/脚本。

我有一个文本文件,我用 notepad++ 打开它,其中包含许多语句,例如:

Insert into XXX (XXX,XXX,XXX) Values (XXX, XXX, XXX);

我需要使用 notepad++ python 脚本将这些语句转换为

BEGIN
Insert into XXX (XXX,XXX,XXX) Values (XXX, XXX, XXX);
EXCEPTION
WHEN dup_val_on_index
THEN dbms_output.PUT_LINE('XXX');
END;
/

这意味着我必须在 Insert into Statement 之前和之后放置代码。

有人可以帮助我吗?我可能会通过经济计算或类似的方法来提供帮助,但是这项任务对我来说非常困难:/

十分感谢 :-)

4

2 回答 2

0

假设是您正在使用的特定 python 插件,您可以使用正则表达式替换:

editor.pyreplace(r"^([Ii]nsert into.*? [Vv]alues.*?\;)", r"BEGIN\r\n\1\r\nEXCEPTION\r\nWHEN dup_val_on_index\r\nTHEN dbms_output.PUT_LINE('XXX');\r\nEND;/\r\n")

注意:我不确定'XXX'字符串中 的字符串dbms_output.PUT_LINE('XXX')应该是表名还是值之一或文字字符串“XXX”。您可以将另一个捕获组添加到正则表达式字符串中,以捕获想要的任何一个,如果文字字符串

您也可以在没有 python 插件的情况下使用类似的搜索/替换模式。Notepad++ 支持正则表达式搜索和替换。

编辑:这应该在正则表达式模式下与 Notepad++ 的内置搜索和替换一起使用:

Find what: ([Ii]nsert into.*? [Vv]alues.*?\;)
Replace with: BEGIN\r\n\1\r\nEXCEPTION\r\nWHEN dup_val_on_index\r\nTHEN dbms_output.PUT_LINE\('XXX'\);\r\nEND;/\r\n
于 2013-02-26T18:20:40.027 回答
0

如果您正在寻找基于 Notepad++ 的查找和替换解决方案,您可以尝试以下方法。
我假设这dbms_output.PUT_LINE('XXX')是为了显示表名(插入语句中的第一个 xxx)。

在 Find & Replace 取消选中Match case并选择 Regular Expression with match Newlineunchecked ( Notepad++ version > 6.0)

寻找

Insert\s*into\s*([a-z0-9]*)(\s*)(.*)(\s*)values(\s*)(.*);

代替

BEGIN\r\n\Insert into \1 \3 values \6;\r\nEXCEPTION\r\nWHEN dup_val_on_index\r\nTHEN dbms_output.PUT_LINE\(\'\1\'\);\r\nEND;

祝你好运

于 2013-02-26T20:09:19.247 回答