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 型を持つ新しい変数にデータを抽出し、そのフィールドを設定する必要があります。 ') 値 (t_papaa も私のカスタム型で、2 つの varchar フィールドが含まれています)。

Oracle PL-SQLプロシージャ内でこれを行う最良の方法は何ですか? 必要なデータを out パラメータに抽出する必要があります。これに正規表現を使用できますか (どのように?) 残念ながら、私はオラクルの初心者なので...

ヒントを教えてください。ありがとう。

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;

上記の重要なビットは、リテラルで始まり、そうでない文字のシーケンスが続き、 final で終わる'EXER/[^/]+/'文字列を探していることです。EXER///

上記のクエリは を返しますがEXER/ATP-45/、 のような標準の文字列関数を使用したりSUBSTR、不要なビットを削除しLTRIMたりできます。RTRIM

于 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 に答える