0

我将文本作为 varchar2 变量提供,例如:

EXER/ATP-45/-//
MSGID/BIOCHEM3/-/-/-/-/-//
GEODATUM/UTM//
PAPAA/1KM/-//15KM/-//

因此,每个行分隔符都是 //(但也可以有空格、新行等,它们应该被忽略)。'-' 表示空白字段,应忽略。我还定义了新的对象类型,定义如下:

TYPE t_promien      IS RECORD(
EXER                VARCHAR2,
MSGID               VARCHAR2(1000),
PAPAA               t_papaa
......
)

我需要将相应行中的数据提取到具有 t_promien 类型的新变量中并设置其字段,例如 - EXER 应该有 'ATP-45' 值,MSGID 应该有 'BIOCHEM3',PAPAA 应该有 ('1KM','15KM ') 值(t_papaa 也是我的自定义类型,它包含 2 个 varchar 字段)。

在 oracle PL-SQL 过程中执行此操作的最佳方法是什么?我需要将所需的数据提取到 out 参数中。我可以为此使用正则表达式吗(如何?)不幸的是,我完全是 oracle 的新手,所以...

你能给我一些建议吗?谢谢。

4

2 回答 2

0

你可以REGEXP_SUBSTR用这样的东西来做到这一点:

SELECT REGEXP_SUBSTR('EXER/ATP-45/-//
MSGID/BIOCHEM3/-/-/-/-/-//
GEODATUM/UTM//
PAPAA/1KM/-//15KM/-//', 'EXER/[^/]+/', 1, 1) AS EXER
FROM DUAL;

上面的重要一点是'EXER/[^/]+/'它正在寻找一个以文字开头的字符串,EXER/然后是一系列字符,这些字符不是/并且以 final 结尾/

上面的查询将返回EXER/ATP-45/,但您可以使用标准字符串函数,如SUBSTR,LTRIMRTRIM删除不需要的位。

于 2013-01-24T08:57:48.723 回答
0

在 PL/SQL 中使用 REGEXP_SUBSTR 的简单演示。

CREATE OR REPLACE PROCEDURE TEST_REGEXP_PROC(VAR_PI_MSG IN VARCHAR2,
                                             T_PO_PAPAA OUT T_PROMIEN) AS

  VAR_L_EXER  VARCHAR2(1000);
  VAR_L_MSGID VARCHAR2(1000);

BEGIN

  SELECT SUBSTR(REPLACE(REGEXP_SUBSTR(VAR_PI_MSG, 'EXER/[^/]+/', 1, 1),'/'),5)
    INTO VAR_L_EXER
    FROM DUAL;

  T_PO_PAPAA.EXER := VAR_L_EXER;

  SELECT SUBSTR(REPLACE(REGEXP_SUBSTR(VAR_PI_MSG, 'MSGID/[^/]+/', 1, 1),'/'),6)
    INTO VAR_L_MSGID
    FROM DUAL;

  T_PO_PAPAA.MSGID := VAR_L_MSGID;  

END;

希望这会让你开始。

于 2013-08-27T12:07:00.503 回答