我正在SQL中构建一个小型项目,以自动化由于ORA-12899 -值对于列太大而发生的加载失败。
从一个错误存储库表中,我可以得到如下所示的错误消息,
“ORA-12899:列“SCOTT”.“TABLE_EMPLOYEE”.“NAME”的值太大(实际值为15,最大值为10)
我希望使用正则表达式从上述错误消息中提取以下DDL,
ALTER TABLE TABLE_EMPLOYEE MODIFY NAME VARCHAR2(15);
下面是我目前的代码。有了这个,我只能提取模式名称,即“SCOTT”SELECT REGEXP_SUBSTR('ORA-12899: value too large for column "SCOTT"."TABLE_EMPLOYEE"."NAME" (actual:15 , maximum: 10)','"([^"]+)"',1,1,NULL,1) AS RESULT from DUAL;
如果有人能用正确的正则表达式或任何其他方法来帮助我提取这些信息,我将不胜感激
3条答案
按热度按时间igetnqfo1#
您可以使用正则表达式:
其中,对于示例数据:
输出:
| 查询|
| - -|
| 修改“名称”VARCHAR 2(15)|
| 更改表格“测试1”。“实际值20”修改“值20”变量字符2(25)|
fiddle
bwntbbo32#
您需要编写如下PL/SQL块:
结果是:
实际上,您应该生成一个动态SQL,就像您看到的那样。通过这个,您可以从错误中提取的信息生成任何命令。
6fe3ivhb3#
这里有一个选项,它只使用
substr + instr
组合。截至您的示例数据:这很可能是伪造的。“真实的”错误消息如下所示:
在处理这样的字符串时,你只需要精确,否则你会得到意想不到的(错误的)结果。
还有一个例子(对于@MT0 's-正确-反对我之前的代码),表和列包含数字:
因此: