oracle 需要从TEXT列中提取值

ax6ht2ek  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(168)

我有一个表xx_debug,其中有两列IDTEXT列。
我们存储IDTEXT如下

10, "POST_OPERATION_API: INV_ITEM_STATUS_CP.CREATE_ITEM_ERES_EVENT(p_commit => 'T',p_init_msg_list => 'T',p_event_name  => 'oracle.apps.inv.itemCreate',p_event_key   => '148-850154',p_caller_type => 'CREATE_ITEM_POST_APPROVAL',p_org_id      => 148,p_inventory_item_id => 850154);"

字符串
现在,对于TEXT列记录,我需要从整个文本中获取p_org_id => 148p_inventory_item_id => 850154
如何将p_org_id => 148p_inventory_item_id => 850154放入p_org_idp_inventory_item_id的变量中?
我尝试使用extractregexp_substr,但在pl/sql中没有得到确切的结果。

z31licg0

z31licg01#

使用REGEXP_SUBSTR查找前缀,然后查找数字,并返回包含数字的捕获组:

SELECT id,
       REGEXP_SUBSTR(text, 'p_org_id\s*=>\s*(\d+)', 1, 1, NULL, 1) AS org_id,
       REGEXP_SUBSTR(text, 'p_inventory_item_id\s*=>\s*(\d+)', 1, 1, NULL, 1) AS inventory_id 
FROM   xx_debug

字符串
其中,对于样本数据:

CREATE TABLE xx_debug (id, text) AS
SELECT 10, q'{POST_OPERATION_API: INV_ITEM_STATUS_CP.CREATE_ITEM_ERES_EVENT(p_commit => 'T',p_init_msg_list => 'T',p_event_name  => 'oracle.apps.inv.itemCreate',p_event_key   => '148-850154',p_caller_type => 'CREATE_ITEM_POST_APPROVAL',p_org_id      => 148,p_inventory_item_id => 850154);}' FROM DUAL;


产出:
| ID|组织ID|公司简介|
| --|--|--|
| 10 | 148 | 850154 |
fiddle

相关问题