2013-03-06 28 views
-2

我在哪裏我收到三個弦參數 ItemCode ITEMNAME 量一體化項目工作如何轉換分號分隔成

和值將在此格式

ItemCod參數值 T1; T2; T3;

ItemName參數值 鉛筆盒;橡皮擦;鼠標墊;

金額參數值 1900; 2000; 8900;

現在我想有一個過程中,我會收到這些參數和查詢將它轉換爲列和記錄。我不是SQLServer的人,我在Oracle中做了類似的發送。但是,這是一個分半分鐘接收並轉換成列和行。我很抱歉質量差的帖子。這是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; 
+0

請編輯您的帖子,包括你的一個解決方案的嘗試。謝謝。 – bernie 2013-03-06 04:24:20

+0

*質量很低:*您嘗試過什麼?你的代碼在哪裏? – 2013-03-06 04:25:18

+0

好的我剛剛更新了我的問題。 – user2050367 2013-03-06 04:55:20

回答

0

可能與此有關:Can I tokenize a string using t-SQL

您可以使用XML查詢tokenise值:

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

+0

Cong superbbbbbbbbb ...你搖滾人:)只需要你的代碼中的一件事是我不想插入到表中的值..只想使用SELECT獲得輸出只..沒有插入:)可以我有一個查詢將使列和生成輸出作爲多個記錄? – user2050367 2013-03-06 05:52:16

+0

我不會將此標記爲答案,因爲根據此解決方案,記錄數量未定義,並且可能超過2個,因此每個解決方案都提出了有限的解決方案。 – user2050367 2013-03-07 05:16:16