c# - 用于解析列的 Oracle 查询
问题描述
我在 Oracle 12c DB 中有一个调试日志表,我试图在 jQuery 数据表中解析和显示。
我正在使用以下查询,当我在 SQL Developer 窗口中运行它时,它运行良好,但在 Web 应用程序中永远不会结束执行。
数据如下所示,存储在 DTEXT 列中,只有 8500 行。
SID[1769]: USPPICKEVENTS[90] LVSPICKSQL[INSERT INTO DBMIRROR (...).
SID[130]: USPPICKITEMS[131]. LVCMIRRORCOLLECTION.Count[0].
SID 后面的数字是 ,好吧,SID;然后是存储过程名称,第二个数字是 SP 内的行号和其他类型的描述,这些是我要解析的(即 SID、USP 名称、行号、描述)。
这是我正在使用的查询:
SELECT DTEXT, CHANGE_DATE,
REGEXP_SUBSTR(REPLACE(DTEXT, ' ', ''), '\[([^]]+)\]', 1, 1, NULL, 1) AS SID,
SUBSTR(REPLACE(DTEXT, ' ', ''), INSTR(REPLACE(DTEXT, ' ', ''), ':', 1, 1) + 1,
INSTR(REPLACE(DTEXT, ' ', ''), '[', 1, 2) - INSTR(REPLACE(DTEXT, ' ', ''), ':', 1, 1) - 1) AS USP,
SUBSTR(REPLACE(DTEXT, ' ', ''), INSTR(REPLACE(DTEXT, ' ', ''), ']', 1, 2) + 1) AS DESCR,
regexp_substr(REPLACE(DTEXT, ' ', ''), '\[([^]]+)\]', 1, 2, NULL, 1) USP_LINENUM
FROM DEBUG_LOG) ;
- 不确定这是否是正确或有效的方法,我绝不是 Oracle 开发人员。
- 不知道为什么当返回数据时它会继续前进,而 jQuery 数据表永远不会填充。
这是填充数据表的函数,Web 服务 URL 被传递给它,服务使用上述查询并转换为 JSON 字符串。
function populateTable(ws_url, parameters, table) {
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
url: ws_url,
cache: false,
data: parameters,
}).done(function (result) {
table.clear().draw();
jResult = JSON.parse(result.d);
if (jResult.length != 0) {
table.rows.add(jResult).draw();
table.columns([5]).visible(false);
}
}).fail(function (jqXHR, textStatus, errorThrown) {debugger
$('#divGrid').hide();
alert(textStatus + ' - ' + errorThrown + '\n' + jqXHR.responseText);
});
}
解决方案
稍微简单一点的查询怎么样?
SQL> with test (col) as
2 (select 'SID[1769]: USPPICKEVENTS[90] LVSPICKSQL[INSERT INTO DBMIRROR (...).' from dual union all
3 select 'SID[130]: USPPICKITEMS[131]. LVCMIRRORCOLLECTION.Count[0].' from dual
4 )
5 select
6 regexp_substr(col, '\d+', 1, 1) sid,
7 regexp_substr(col, '\w+', 1, 3) usp,
8 regexp_substr(col, '\d+', 1, 2) line,
9 trim(substr(col, instr(col, ']', 1, 2) + 1)) description
10 from test;
SID USP LINE DESCRIPTION
----- --------------- ----- ----------------------------------------
1769 USPPICKEVENTS 90 LVSPICKSQL[INSERT INTO DBMIRROR (...).
130 USPPICKITEMS 131 . LVCMIRRORCOLLECTION.Count[0].
SQL>
- 第 1 - 4 行代表样本数据
- SID:给我第一个号码
- USP:给我第三个字
- LINE:给我第二个号码
- 描述:第二个右方括号后面的字符串
至于其余的(ajax、c# 和其他东西) - 我无能为力,抱歉。
推荐阅读
- javascript - 如何跨页面维护按钮状态
- debugging - 在 GDB 中的 ARM Thumb 指令上设置断点
- docker-compose - MLflow Artifacts 存储工件(谷歌云存储)但不在 MLFlow UI 中显示它们
- powershell - powershell count 已定义子文件夹中已定义文件的数量
- reactjs - 为什么我的减速器没有同步变化?
- php - Lumen:上传文件/磁盘没有配置驱动
- mongodb - 如何在 MongoDB 中使用 find 查找对象的嵌套对象
- android-studio - Android Studio 中不同的文件夹符号是什么意思?
- sql - SQL语句选择所有死人
- amazon-web-services - 如何从 terraform 中的所有可用区域中选择不同的子网