-2

3 つの文字列パラメーター ItemCode ItemName Amount を受け取る統合プロジェクトに取り組んでいます

値はこの形式になります

ItemCod パラメータ値 T1;T2;T3;

ItemName パラメータ値 鉛筆ボックス;消しゴム;マウス パッド;

金額 パラメータ値 1900;2000;8900;

ここで、これらのパラメーターを受け取り、クエリがこれを列とレコードとして変換する手順が必要です。私はSQLServerの人ではなく、送信のためにOracleで同様のことをしました。しかし、これはセミコロンで区切られて列と行に変換されています。質の悪い投稿で申し訳ありません。これがオラクルの試みです。

create or replace
PROCEDURE PROC_SENDREQDETAILS 
(
  P_REQ_NUMBER VARCHAR2  
, P_ATTRIBUTE1 VARCHAR2
, P_LOCATION_NAME VARCHAR2
, P_ITEM_ID VARCHAR2  
, P_QTY VARCHAR2
, P_NEED_BY_DATE VARCHAR2
, P_ATTRIBUTE3 VARCHAR2
) IS
BEGIN

INSERT INTO PO_REQUISITIONS_STAGING(req_number_segment1, attribute1, location_name, item_id, quantity, need_by_date, attribute3)
 select  regexp_substr(request_number,'[^;]+',1,level),
         regexp_substr(attribute1,'[^;]+',1,level),
         regexp_substr(location_name,'[^;]+',1,level),
         regexp_substr(item_id,'[^;]+',1,level),
         regexp_substr(quantity,'[^;]+',1,level),
         regexp_substr(need_by_date,'[^;]+',1,level),
         regexp_substr(attribute3,'[^;]+',1,level)
  from  (
      select P_REQ_NUMBER request_number, P_ATTRIBUTE1 attribute1, P_LOCATION_NAME location_name, P_ITEM_ID item_id, P_QTY quantity, P_NEED_BY_DATE need_by_date, P_ATTRIBUTE3 attribute3
      from dual
      )
  connect by regexp_substr(request_number,'[^;]+',1,level) is not null;
end;
--END PROC_SENDREQDETAILS;
4

1 に答える 1

0

これに関連している可能性があります: Can I tokenize a string using t-SQL

XML クエリを使用して、値をトークン化できます。

INSERT INTO t
(cod, name)
VALUES
('T1;T2;',
 'Pencil Box;Eraser;');

---------------------------
|COD   |NAME              |
|T1;T2;|Pencil Box;Eraser;|
---------------------------

INSERT t2
SELECT
  CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') cod,
  CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') name
FROM t;

INSERT t2
SELECT
  CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') cod,
  CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') name
FROM t;

----------------
|COD|NAME      |
|T1 |Pencil Box|
|T2 |Eraser    |
----------------

http://sqlfiddle.com/#!3/258a5/1

于 2013-03-06T05:23:53.477 に答える